洛谷 P1525 【关押罪犯】种类并查集
题解 P1525 【关押罪犯】:种类并查集
前言:
在数据结构并查集中,种类并查集属于扩展域并查集一类。
比较典型的题目就是:食物链(比本题难一些,有三个种类存在)
首先讲一下本题的贪心,这个是必须要懂的。我们假设最后Z 市长看到的那个冲突事件的影响力为 x (也就是有一对仇恨值为 x 的罪犯在同一监狱)那么比 x 仇恨值更高的每一对罪犯必须分配到不同的监狱(不然,最终答案就不是 x ,而是这一对罪犯的仇恨值了);
所以本题是存在单调性的,只需要从大到小枚举仇恨值,到那一对与前面出现矛盾了,直接输出即可;
思路:
种类并查集中“种类”这个词也不是绝对的,它也可以说是一种关系,而本题的关系就在于要将罪犯分配到的两个监狱;我们可以将数组开到两倍来模拟这两个监狱(用A,B表示),每个罪犯在监狱中都有一个位置。
假设现在要把两个有仇的罪犯分别放到 A 或 B 中,我们发现如果要满足这一对的要求(即分到的监狱不同),那么如果第一个罪犯在 A 监狱,第二个罪犯必须在 B 监狱,反之也一样。
所以我们可以将 A 监狱中第一个罪犯的位置与 B 监狱中第二个罪犯的位置用并查集维护,即这样合并才能保证分到的监狱不一样。但第一个罪犯不一定只能在 A 监狱,所以我们将 B 监狱中 第一个罪犯的位置与 A 监狱中第二个罪犯的位置维护。
而出现矛盾的情况,举个例子: a 和 c 有仇,b 和 c 有仇,那么此时 a 和 c 在不同监狱,b 和 c 也在不同监狱,也就是说 a 和 b 一定在一个监狱。可一旦此时 a 和 b 有仇那么就矛盾了,因为a 和 b 要在不同监狱不然会有矛盾,可 a 和 b 已经在之前判定为必须在同一监狱,所会矛盾,此时就可以直接输出 a 和 b 的仇恨值(原理参见前言的贪心)
代码实现:
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#define rg register int//卡常
using namespace std;
struct su{
int f,t,v;
}a[100010];
int n,m,l,r,mid,f;
int s[20001<<1]; //不要单独开两数组!
inline int qr(){ char ch; //快读
while((ch=getchar())<'0'||ch>'9');
int res=ch^48;
while((ch=getchar())>='0'&&ch<='9')
res=res*10+(ch^48);
return res;
}
inline bool cmp(su x,su y){
return x.v>y.v; //从大到小排序
}
inline int get(int x){
if(x==s[x])return x;
return s[x]=get(s[x]);//路径压缩
}
int main(){
n=qr(),m=qr();
for(rg i=1;i<=m;++i)
a[i].f=qr(),a[i].t=qr(),a[i].v=qr();
sort(a+1,a+m+1,cmp); //贪心
for(rg i=1;i<=n;++i)
s[i]=i,s[i+n]=i+n; //初始化不能忘!!!
for(rg i=1;i<=m;++i){
rg x=a[i].f,y=a[i].t;
if(get(x)==get(y)||get(x+n)==get(y+n)){
f=a[i].v;break;//不能在同一监狱的仇人撞上了
}
s[s[x+n]]=s[y];
s[s[x]]=s[y+n];//维护两罪犯在不同监狱的关系
}printf("%d\n",f);
return 0;
}
种类并查集其实你理解了,码量不高(如果算上快读等预处理的话......
一些对种类并查集的理解(血泪史)
代码中开数组是讲了不要开两个单独数组,因为两个独立的数组初始化时,赋的值都是 从 1 开始的,返回的是无区别的\(1\)到\(n\)的下标,丢失了“A监狱”和“B监狱”的关系。将两数组并查集维护(不好实现)而且会因为有些值重复而让你 WA 到怀疑人生
其次,我们每次判断矛盾时,两个罪犯在A监狱和B监狱的位置都要判,而且是每个监狱单独判!这保证了算法的正确性!
洛谷 P1525 【关押罪犯】种类并查集的更多相关文章
- 洛谷P1525 关押罪犯(并查集、二分图判定)
本人蒟蒻,只能靠题解AC,看到大佬们的解题思路,%%%%%% https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编 ...
- 洛谷1525 关押罪犯NOIP2010 并查集
问题描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示某两 ...
- 洛谷 P1525 关押罪犯
题目链接 https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1−N.他们之间的关系自然也极不和谐.很多罪 ...
- 洛谷P1525 关押罪犯
To 洛谷.1525 关押罪犯 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用 ...
- 洛谷 P1525 关押罪犯 & [NOIP2010提高组](贪心,种类并查集)
传送门 解题思路 很显然,为了让最大值最小,肯定就是从大到小枚举,让他们分在两个监狱中,第一个不符合的就是答案. 怎样判断是否在一个监狱中呢? 很显然,就是用种类并查集. 种类并查集的讲解——团伙(很 ...
- 洛谷 P1525 关押罪犯 (贪心,扩展域并查集)
题意:有\(n\)个罪犯,\(m\)对罪犯之间有仇,现在将这些罪犯分到两个监狱里去,问两个监狱里有仇罪犯之间的最大权值最小为多少. 题解:先按边权从大到小排序,然后贪心,边权大的两个罪犯,我们一定要先 ...
- 洛谷 P1525 关押罪犯==codevs 1069 关押罪犯[NOIP 2010]
P1525 关押罪犯 513通过 1.4K提交 题目提供者该用户不存在 标签图论并查集NOIp提高组2010 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 咳咳.竟MLE了. 囧.运行时错误 ...
- 洛谷P1525关押罪犯——并查集
题目:https://www.luogu.org/problemnew/show/P1525 并查集+贪心,从大到小排序,将二人分在不同房间,找到第一个不满足的即为答案. 代码如下: #include ...
- 洛谷 P1525 关押罪犯 NOIp2010提高组 (贪心+并查集)
题目链接:https://www.luogu.org/problemnew/show/P1525 题目分析 通过分析,我们可以知道,这道题的抽象意义就是把一个带边权的无向图,分成两个点集,使得两个集合 ...
- [NOIP2010] 提高组 洛谷P1525 关押罪犯
刚才做并查集想到了这道以前做的题,干脆一并放上来 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可 ...
随机推荐
- 实战重现隐藏在A标签_blank下的危险漏洞,简略说明noopener的作用
前几日,在看阮一峰老师的博客文章中,发现了这么一篇 .标题为 <target = "_blank" 的危险性(英文)>.这篇文章同事看过之后因为不理解其中的危险之处,念 ...
- 【Beta阶段】启程会议——第零次Scrum Meeting!
本次会议为Beta阶段功能的概括性介绍与任务主线的确定会议. 本次会议拟确定第二阶段各位队员的内容与主要职责 会议时长:1小时30分(因为是启程会议,所以说的比较多) 会议地点:7公寓1楼会客室 ...
- Linux内核实验作业六
实验作业:分析Linux内核创建一个新进程的过程 20135313吴子怡.北京电子科技学院 [第一部分]阅读理解task_struct数据结构 1.进程是计算机中已运行程序的实体.在面向线程设计的系统 ...
- 基于Struts2+Hibernate的朋友圈留言网站开发的质量属性
在课堂上我们了解了质量高于功能,质量属性是指影响质量的相关因素,是对质量的描述.现在我们对基于SSH的交友网站开发的质量属性可以从以下几个方向进行分析: (1)可用性: 当错误发生时,使用可用性战术进 ...
- 基于Air800+Arduino+ESP8266的混合物联网开发
流程图如下:
- js 中引用类型 的深拷贝 和 浅拷贝的区别
一.曾经在读JQ源码的时候,对深拷贝算是有了一点的理解.我们在项目中是不是经常会遇到这样的问题呢? 后台返回一个数组对象(引用类型).次数在页面渲染中需要对部分数据进行处理 比如:银行卡6234509 ...
- 对象函数的readFileSyc类
对于所有的Syc后缀都是表示同步,默认不加是异步操作.
- ELK环境配置
一.安装java环境 1.下载jre并安装,安装过程中没有什么特殊的,一直默认下一步即可. 2.配置环境变量 其中变量值为我们安装的jre的路径 二.安装elasticsearch 1.下载es安装包 ...
- 洛谷 P1344 [USACO4.4]追查坏牛奶Pollutant Control 解题报告
P1344 [USACO4.4]追查坏牛奶Pollutant Control 题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候 ...
- luogu2048 [NOI2010]超级钢琴 (优先队列+主席树)
思路:先扫一遍所有点作为右端点的情况,把它们能产生的最大值加到一个优先队列里,然后每次从优先队列里取出最大值,再把它对应的区间的次大值加到优先队列里,这样做K次 可以用一个前缀和,每次找i为右端点的第 ...