传送门

首先 这是一个并查集= =

这道题其实明白了还挺简单的qwq

思路:

因为只看仇恨值最大的一对儿,所以把他们从大到小排序,越大的就尽量分开,直到不能再分为止qwq

  • q[x]表示x最大的敌人(x对q[x]的仇恨值最大);
  • 如果x已经有了最大的敌人q[x],那么y就该跟q[x]分到一起;否则q[x] = y;
  • 所以并查集存的不是两个监狱!存的是“因为有共同敌人而被(勉为其难的)划分到一起的罪犯”;
  • 这几个并查集由于“敌人的敌人”一点点合并到一起;
  • 当目前最大的一对儿敌人已经被分到一个监狱的时候,就说明分不开了,输出。

一些细节:

  • 初始化(fa[i] = i)
  • 判断父亲的时候要用getfather(x)而不是fa[x](因为还没求...)(所以还是先写个xx = getfather(x)吧!)
  • 同样的,合并的时候,用“xx = getfather(x); yy = getfather(y); fa[x] = y;”,
  • 不能写fa[fa[x]]  (fa又不是函数!),也不能写getfather(getfather(x))  (getfather也不是整数!)
  • 结构体p存的是罪犯关系对数,每一个代表a,b的编号和他们的仇恨值c,所以数组大小是1e6(RE了4次qaq) ——“那你为啥开2e5”
  • 如果有冲突的话输出并直接return 0,没有的话循环结束后就输出0!(这个不看题解自己是想不到的qwq)
  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. const int maxn = ;
  5. int fa[maxn],q[maxn];
  6. int n,m;
  7. struct abc {
  8. int a,b,c;
  9. } p[];
  10.  
  11. int cmp(abc x,abc y) {
  12. return x.c > y.c;
  13. }
  14.  
  15. int getfather(int x) {
  16. if(x == fa[x])return x;
  17. fa[x] = getfather(fa[x]);
  18. return fa[x];
  19. }
  20.  
  21. void add(int x,int y){
  22. x = getfather(x);
  23. y = getfather(y);
  24. fa[x] = y;
  25. }
  26.  
  27. int main() {
  28. scanf("%d%d",&n,&m);
  29. for(int i = ;i <= n;i++)
  30. fa[i] = i;
  31. for(int i = ; i <= m; i++)
  32. scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);
  33. sort(p+,p+m+,cmp);
  34. for(int i = ; i <= m; i++) {
  35. if(getfather(p[i].a) == getfather(p[i].b)){
  36. printf("%d",p[i].c);
  37. return ;
  38. }
  39. if(!q[p[i].a])q[p[i].a] = p[i].b;
  40. else add(q[p[i].a],p[i].b);
  41. if(!q[p[i].b])q[p[i].b] = p[i].a;
  42. else add(q[p[i].b],p[i].a);
  43.  
  44. }
  45. printf("");
  46. return ;
  47. }

Luogu P1525 关押罪犯的更多相关文章

  1. NOIp 2010/Luogu P1525 关押罪犯 【二分图/并查集】 By cellur925

    题目传送门 感想:相信自己的想法!继续挖掘! 读完题目后:看到的最大值最小?二分答案啊!再仔细一看:wi达到了1e9,二分可能费点劲.(其实真的是可以的)而且check函数貌似并没有什么行之有效的写法 ...

  2. 洛谷 P1525 关押罪犯

    题目链接 https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1−N.他们之间的关系自然也极不和谐.很多罪 ...

  3. 洛谷 P1525 关押罪犯==codevs 1069 关押罪犯[NOIP 2010]

    P1525 关押罪犯 513通过 1.4K提交 题目提供者该用户不存在 标签图论并查集NOIp提高组2010 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 咳咳.竟MLE了. 囧.运行时错误 ...

  4. 洛谷P1525 关押罪犯(并查集、二分图判定)

    本人蒟蒻,只能靠题解AC,看到大佬们的解题思路,%%%%%% https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编 ...

  5. [NOIP2010] 提高组 洛谷P1525 关押罪犯

    刚才做并查集想到了这道以前做的题,干脆一并放上来 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可 ...

  6. 洛谷P1525 关押罪犯

    To 洛谷.1525 关押罪犯 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用 ...

  7. 【题解】洛谷 P1525 关押罪犯

    题目 https://www.luogu.org/problemnew/show/P1525 思路 把所有边sort一遍从大到小排列 运用并查集思想敌人的敌人就是朋友 从最大边开始查找连着的两个罪犯 ...

  8. 洛谷——P1525 关押罪犯

    https://www.luogu.org/problem/show?pid=1525 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间 ...

  9. P1525 关押罪犯 并查集

    题目描述 SS城现有两座监狱,一共关押着NN名罪犯,编号分别为1-N1−N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值) ...

随机推荐

  1. ArrayList 原码解析

    基于java1.71.ArrayList 是基于数组实现的 通过源码 我们可以知道 ArrayList 提供了三种构造器用于实例化 /** * Constructs an empty list wit ...

  2. HTML的head标签

    前端开发工具介绍: Hbuilder:可以快速的生成HTML标准文档结构,集成了很多方便的快捷键.--------------------------------------------------- ...

  3. nginx 匹配规则小总结

    nginx location 等号类型(=)的优先级最高,需要精确匹配.一旦匹配成功,则不再查找其他匹配项. ^~类型表达式.一旦匹配成功,则不再查找其他匹配项. 正则表达式类型(~ ~*)的优先级次 ...

  4. 【c++】计算句子中单词的平均长度

    Description 编程输入一行文本,计算这行文本的单词平均长度.假设每个单词用至少一个空格或者标点(英文逗号.句号)隔开.使用C++ string类型. Input 输入一行文本,不包含数字 O ...

  5. 1474 十进制转m进制

    1474 十进制转m进制  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解       题目描述 Description 将十进制数n转换成m进制数 m ...

  6. React 入门学习笔记整理(七)—— 生命周期

    (1)react 生命周期 只有类组件有生命周期,函数组件没有生命周期 1.挂载阶段:这些方法会在组件实例被创建和插入DOM中时被调用: 1)constructor(props) 初始化组件的状态.绑 ...

  7. 理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法

    ajax的4种方法:$.get.$.post.$getJSON.$ajax. 1.$.get $.get()方法使用GET方式来进行异步请求,它的语法结构为: $.get( url [, data] ...

  8. 网页一键加入QQ群

    三步简单实现功能:网页提供加入qq群按钮  让他人一键加入qq群 第一步:进入qq群官网:http://qun.qq.com/join.html 第二步:选择需要加入的群并生成网页代码 第三步:在网页 ...

  9. 大表分批删除脚本之MySQL版

    经常需要定期对某些表删除历史数据,通常这样的表的数据又是非常巨大,为了减轻对线上环境的影响,删除时必须分成小批量来进行. 以前分享过SQLServer的版本. 下面是MySQL版本: delimite ...

  10. fedora添加ntfs文件系统支持

    ntfs支持(安装后不能打开,重启) 如果没有换源先看一下换源. 查找库中是否有ntfs-3g. [root@bogon zhujikuan]# yum search ntfs 上次元数据过期检查:0 ...