洛谷题目 P5994 [PA 2014] Kuglarz 题解 (本题较难)

题目传送门:

P5994 [PA 2014] Kuglarz - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

前言:

        本题涉及到最小生成树中的 kruskal  算法和并查集算法,图论基础概念两大知识点,瞎按对莱索没有学过图论的或最小生成树的可能会对这道题无从下手,学过最小生成树和图论的初学者对这道题可以说是非常好的历练。难度可以给到中等偏上(很简单的呀)。

#题目核心目标:

        这道题的很新目标是确定最少花费,从而保证能猜出哪些被子底下藏着球,而解题的关键在于将问题转化成最小生成树问题。本题将详细境界。

##问题分析转化:

        1、信息关联与节点表示:

                把每个被子看做图中的一个节点。对于一个被子序列,我们要确定每个被子是否藏球,而通过魔术师提供的关于区间 [i,j] 内藏球总数奇偶性的信息,就可以逐步推断出每个被子的情况。

                例如,知道区间 [l,r] 的询问都对应途中的一条边,变得两个端点分别是i-1j ,变得权值就是这次询问的花费 c_{i_{j}} 。因为我们可以利用这个区间的奇偶性信息来连接这两个端点所代表的节点状态。

3、问题等价性:

                我们的目标使用最少的花费来获取足够的信息来确定所有杯子里是否藏球,这就相当于在图中找到一个变得集合,使得这些边能够连接所有节点,并且这些边的权值总和最小,恰好就是我们经典的最小生成树问题。

###最小生成树选择-Kruskal 算法:

        1、具体步骤:

                1.1、边的排序:将所有表示询问的边按照花费从小到大进行排序。这里做的目的是优先选择花费晓得询问,以满足最小花费的要求。

                1.2、并查集的使用:

  • 并查集是一种用于处理不相交集合合并与查询问题的数据结构。在本题中,我们使用并查集来判断加入一条边后是否会形成环。
  • 初始时,每个节点的父节点就是它自身,表示每个节点都属于一个独立的集合。
  • 对于每条边,我们查找其两个端点所在集合的根节点。如果两个端点的根节点不同,说明这两个端点属于不同的集合,加入这条边不会形成环,我们就将这条边加入到最小生成树中,并合并这两个集合(即将一个集合的根节点指向另一个集合的根节点)。
  • 如果两个端点的根节点相同,说明这两个端点已经在同一个集合中,加入这条边会形成环,我们就跳过这条边。

####代码:

#include <bits/stdc++.h>
using namespace std;
const int M = 2005;
struct E {int u, v, w;E(int u, int v, int w) : u(u), v(v), w(w) {}bool operator<(const E& t) const {return w < t.w;}
};
int p[M];
int find(int x) {if (p[x] != x) {p[x] = find(p[x]);}return p[x];
}
void un(int x, int y) {int rx = find(x);int ry = find(y);if (rx != ry) {p[rx] = ry;}
}int main() {int n;cin >> n;vector<E> e;for (int i = 1; i <= n; ++i) {for (int j = i; j <= n; ++j) {int o;cin >> o;e.emplace_back(i - 1, j, o);}}for (int i = 0; i <= n; ++i) {p[i] = i;}sort(e.begin(), e.end());long long C = 0;for (const auto& g : e) {int u = g.u;int v = g.v;int w = g.w;int ru = find(u); int ry = find(v);if (ru != ry) {un(u, v);C += w;}}cout << C << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/67643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

消息队列篇--通信协议篇--网络通信模型(OSI7层参考模型,TCP/IP分层模型)

一、OSI参考模型&#xff08;Open Systems Interconnection Model&#xff09; OSI参考模型是一个用于描述和标准化网络通信功能的七层框架。它由国际标准化组织&#xff08;ISO&#xff09;提出&#xff0c;旨在为不同的网络设备和协议提供一个通用的语言和结构&#xff0c;以…

C# Winform制作一个登录系统

using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 登录 {p…

10.7 LangChain Models深度解析:解锁大模型集成与调优的全景攻略

LangChain Models深度解析:解锁大模型集成与调优的全景攻略 关键词: LangChain Models模块、大模型集成、LLM调用优化、多模型管理、本地模型部署 一、Models模块的定位:大模型应用的“中央调度器” 传统开发的痛点: 碎片化集成:每个模型需单独编写适配代码性能黑洞:缺…

记一次STM32编译生成BIN文件过大的问题(基于STM32CubeIDE)

文章目录 问题描述解决方法更多拓展 问题描述 最近在一个项目中使用了 STM32H743 单片机&#xff08;基于 STM32CubeIDE GCC 开发&#xff09;&#xff0c;它的内存分为了 DTCMRAM RAM_D1 RAM_D2 …等很多部分。其中 DTCM 的速度是比通常的内存要快的&#xff0c;缺点是不支持…

996引擎 -地图-添加安全区

996引擎 -地图-添加安全区 文件位置配置 cfg_startpoint.xls特效效果1345参考资料文件位置 文件位置服务端D:\996M2-lua\MirServer-lua\Mir200客户端D:\996M2-lua\996M2_debug\dev配置 cfg_startpoint.xls 服务端\Mir200\Envir\DATA\cfg_startpoint.xls 填歪了也有可能只画一…

【leetcode强化练习·二叉树】同时运用两种思维解题

本文参考labuladong算法笔记[【强化练习】同时运用两种思维解题 | labuladong 的算法笔记] 有的题目可以同时用「遍历」和「分解问题」两种思路来解&#xff0c;你可以利用这些题目训练自己的思维。 559. N 叉树的最大深度 | 力扣 | LeetCode | 给定一个 N 叉树&#xff0c;…

栈和队列特别篇:栈和队列的经典算法问题

图均为手绘,代码基于vs2022实现 系列文章目录 数据结构初探: 顺序表 数据结构初探:链表之单链表篇 数据结构初探:链表之双向链表篇 链表特别篇:链表经典算法问题 数据结构:栈篇 数据结构:队列篇 文章目录 系列文章目录前言一.有效的括号(leetcode 20)二.用队列实现栈(leetcode…

ios swift画中画技术尝试

继上篇&#xff1a;iOS swift 后台运行应用尝试失败-CSDN博客 为什么想到画中画&#xff0c;起初是看到后台模式里有一个picture in picture&#xff0c;去了解了后发现这个就是小窗口视频播放&#xff0c;方便用户执行多任务。看小窗口视频的同时&#xff0c;可以作其他的事情…

OpenAI推出o3-mini推理模型,首次免费开放,性能超越o1,AIME测试准确率高达87.3%

OpenAI在2025年初推出了一款新的推理模型o3-mini&#xff0c;这款模型标志着公司在提升性能的同时也降低了成本&#xff0c;并且首次向免费用户提供访问权限。o3-mini是OpenAI推理系列中最新、最具成本效益的模型&#xff0c;在科学、数学、编程等领域的性能显著超越了之前的o1…

人生不止于职业发展

0 你的问题&#xff0c;我知道&#xff01; 工作意义是啥&#xff1f;职业发展在人生啥角色&#xff1f; 1 工作意义 农村人努力学习考上大学&#xff0c;得好工作&#xff0c;为逃离同村同龄人十几岁就工厂打工命运&#xff0c;过不凡人生&#xff0c;实现改命的唯一途径。…

【算法设计与分析】实验3:动态规划—最长公共子序列

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 掌握动态规划求解问题的思想&#xff1b;针对不同的问题&#xff0c;会利用动态规划进行设计求解以及时间复杂度分析&#xff0…

动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践

利用图神经网络进行节点分类:从理论到实践 前言 在之前的学习中,大家对图神经网络有了初步的了解。本次教程将深入探讨如何运用图神经网络(GNNs)来解决节点分类问题。在节点分类任务里,大家往往仅掌握少量节点的真实标签,却要推断出其余所有节点的标签,这属于归纳式学…

单片机串口打印printf函数显示内容(固件库开发)

1.hal_usart.c 文件 #include <stdio.h> #include "hal_usart.h" #include "stm32F10x.h"//**要根据 使用的是哪个串口 对应修改 串口号 eg&#xff1a;USART1** void USART_PUTC(char ch) {/* 等待数据寄存器为空 */while((USART1->SR & …

网关登录校验

网关登录校验 单体架构时我们只需要完成一次用户登录、身份校验&#xff0c;就可以在所有业务中获取到用户信息。而微服务拆分后&#xff0c;每个微服务都独立部署&#xff0c;不再共享数据。也就意味着每个微服务都需要做登录校验&#xff0c;这显然不可取。 鉴权思路分析 …

wxwidgets直接获取系统图标,效果类似QFileIconProvider

目前只做了windows版本&#xff0c;用法类似QFileIconProvider // 头文件 #ifndef WXFILEICONPROVIDER_H #define WXFILEICONPROVIDER_H#include <wx/wx.h> #include <wx/icon.h> #include <wx/image.h> #include <wx/bmpcbox.h> // Include for wxB…

我的创作纪念日——成为创作者的 第365天(1年)

机缘 考研的结果让我感到一阵绝望&#xff0c;就像单片机突然死机一样&#xff0c;所有的努力像是被一场意外的中断指令打乱了逻辑流程。曾经本科时因为竞赛拿了一堆奖&#xff0c;内心充满虚荣心和成就感&#xff0c;总觉得自己是一个“天选之子”&#xff0c;但考研的失利却像…

React 封装高阶组件 做路由权限控制

React 高阶组件是什么 官方解释∶ 高阶组件&#xff08;HOC&#xff09;是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分&#xff0c;它是一种基于 React 的组合特性而形成的设计模式。 高阶组件&#xff08;HOC&#xff09;就是一个函数&…

【玩转全栈】--创建一个自己的vue项目

目录 vue介绍 创建vue项目 vue页面介绍 element-plus组件库 启动项目 vue介绍 Vue.js 是一款轻量级、易于上手的前端 JavaScript 框架&#xff0c;旨在简化用户界面的开发。它采用了响应式数据绑定和组件化的设计理念&#xff0c;使得开发者可以通过声明式的方式轻松管理数据和…

DS并查集(17)

文章目录 前言一、何为并查集&#xff1f;二、并查集的实现&#xff1f;并查集的初始化查找元素所在的集合判断两个元素是否在同一个集合合并两个元素所在的集合获取并查集中集合的个数并查集的路径压缩 三、来两道题练练手&#xff1f;省份的数量等式方程的可满足性 总结 前言…

Appium介绍

在使用不同版本的Appium包进行自动化测试时&#xff0c;出现警告问题可能是由于版本不兼容、配置不正确等原因导致的。下面将详细介绍解决这些问题的步骤&#xff0c;确保模拟器能够正常启动&#xff0c;并能在Appium查看器中同步显示。 1. 环境准备 首先&#xff0c;确保你已…