传送门

首先 这是一个并查集= =

这道题其实明白了还挺简单的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)
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = ;
int fa[maxn],q[maxn];
int n,m;
struct abc {
int a,b,c;
} p[]; int cmp(abc x,abc y) {
return x.c > y.c;
} int getfather(int x) {
if(x == fa[x])return x;
fa[x] = getfather(fa[x]);
return fa[x];
} void add(int x,int y){
x = getfather(x);
y = getfather(y);
fa[x] = y;
} int main() {
scanf("%d%d",&n,&m);
for(int i = ;i <= n;i++)
fa[i] = i;
for(int i = ; i <= m; i++)
scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);
sort(p+,p+m+,cmp);
for(int i = ; i <= m; i++) {
if(getfather(p[i].a) == getfather(p[i].b)){
printf("%d",p[i].c);
return ;
}
if(!q[p[i].a])q[p[i].a] = p[i].b;
else add(q[p[i].a],p[i].b);
if(!q[p[i].b])q[p[i].b] = p[i].a;
else add(q[p[i].b],p[i].a); }
printf("");
return ;
}

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. hive的行列转换

    行转列(把多个行合并) 比如把: id    tag 1 12 1 23 2 67 2  78 2 76 行转列之后: id tag 1 12,23 2 67,78,76 使用函数为:concat_w ...

  2. 【c++】删除string中指定的字符

    使用string::iterator(字符串迭代器)从开始 str.begin() 迭代到最后 str.end() ,再使用string.erase(const_iterator p)函数来删除迭代器 ...

  3. PHP7.27: MySqlhelper class

    https://github.com/ThingEngineer/PHP-MySQLi-Database-Class https://github.com/wildantea/php-pdo-mysq ...

  4. jQuery js 中return false,e.preventDefault(),e.stopPropagation()的区别(事件冒泡)

    有时候遇到冒泡事件很烦人,真的..... 1.e.stopPropagation()阻止事件冒泡 <head> <title></title> <script ...

  5. element-ui 组件源码分析整理笔记目录

    element-ui button组件 radio组件源码分析整理笔记(一) element-ui switch组件源码分析整理笔记(二) element-ui inputNumber.Card .B ...

  6. python之初识函数

    函数: 函数是对功能或动作的封装. 函数的语法和定义: def 函数名(): 函数体 调用函数: 函数名() 函数返回值: return : 返回 def yue(): print("拿出手 ...

  7. FreeSSHD login with permission denied

    登录遇到问题: Permission denied, please try again. 解决方法: 在window中使用freesshd开启ssh后,客户端登陆时报 access denied错误 ...

  8. Kotlin入门(13)类成员的众生相

    上一篇文章介绍了类的简单定义及其构造方式,当时为了方便观察演示结果,在示例代码的构造函数中直接调用toast提示方法,但实际开发是不能这么干的.合理的做法是外部访问类的成员属性或者成员方法,从而获得处 ...

  9. Python CNN卷积神经网络代码实现

    # -*- coding: utf-8 -*- """ Created on Wed Nov 21 17:32:28 2018 @author: zhen "& ...

  10. redis-4.0.11主从配置初步探究

    redis-4.0.11相较于以前版本,新增了几个安全措施,稍稍研究了6379.conf配置文件,在这里记录一下. 实验环境: centos7.4 redis:redis-4.0.11 1. redi ...