题目地址:http://www.51cpc.com/web/problem.php?id=4261

Summarize:

 此题最巧妙的是“敌人的敌人就是朋友!”,故需先将敌对关系放入优先队列,按怨恨值从大到小排序,建一个数组存储对应敌对关系,

 当遇到第二个以及后来的敌人时,将之前的敌人与后来的敌人放进一个监狱,直到遇见一对关系中两人已经关在统一监狱,即为最大值。

附代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<queue>
#include<cmath>
using namespace std; #define LL long long
const int N = 2e4+;
int n,m, f[N], enemy[N];
struct RELA {
LL a, b, value;
friend bool operator<(const struct RELA &x, const struct RELA &y) {
return x.value<y.value;
}
}; int find(int x) {
if(x != f[x])
f[x] = find(f[x]);
return f[x];
} bool Union(int a, int b) {
int x = find(a);
int y = find(b);
if(x == y) return false;
if(x != y) f[x]=y;
return true;
} int main()
{
ios::sync_with_stdio(false); while(cin>>n>>m)
{
LL a,b,value;
priority_queue<RELA> rela;
for(int i=; i<=n; i++)
f[i]=i, enemy[i]=;
for(int i=; i<m; i++) {
cin>>a>>b>>value;
rela.push(RELA{a,b,value});
} bool can=true;
while(!rela.empty()) {
RELA t = rela.top();
rela.pop();
a=t.a, b=t.b, value=t.value; if(!enemy[a]) enemy[a]=b;
else Union(enemy[a],b);
if(!enemy[b]) enemy[b]=a;
else Union(enemy[b],a); if(find(a) == find(b)) {
can=false;
cout<<value<<endl;
break;
}
}
if(can) cout<<<<endl;
}
}

关押罪犯 - 并查集&优先队列的更多相关文章

  1. NOIP2010关押罪犯[并查集|二分答案+二分图染色 | 种类并查集]

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

  2. NOIP 2010 关押罪犯 并查集 二分+二分图染色

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

  3. Luogu P1525 [NOIp2010提高组]关押罪犯 | 并查集

    题目链接 这一道题,我用了并查集来做.在此题中,并查集的作用就是:将同一个监狱里的罪犯合并到一起. 思路:将每对罪犯之间的怨气值从大到小排序,再依次把他们分到不同的两个监狱里,当发现这一对罪犯已经在同 ...

  4. [noip2010]关押罪犯 并查集

    第一次看的时候想到了并查集,但是不知道怎么实现: 标解,f[i]表示i所属的集合,用f[i+n]表示i所属集合的补集,实现的很巧妙,可以当成一个使用并查集的巧妙应用: #include<iost ...

  5. NOIP2010提高组] CODEVS 1069 关押罪犯(并查集)

    这道这么简单的题目还写了这么久.. 将每个会发生冲突的两人的怒气进行排序,然后从怒气大到小,将两个人放到不同监狱中.假如两人都已经被放置且在同一监狱,这就是答案. ------------------ ...

  6. 洛谷P1525关押罪犯——并查集

    题目:https://www.luogu.org/problemnew/show/P1525 并查集+贪心,从大到小排序,将二人分在不同房间,找到第一个不满足的即为答案. 代码如下: #include ...

  7. LUOGU 1525 关押罪犯 - 并查集拆点(对立点) / 二分+二分图染色

    传送门 分析: 并查集: 第一步先将所有矛盾从大至小排序,显然先将矛盾值大的分成两部分会更优. 普通的并查集都只能快速合并两个元素至同一集合,却不能将两个元素分至不同集合. 对于将很多数分成两个集合, ...

  8. P1525 关押罪犯 并查集

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

  9. luogu1525 [NOIp2011]关押罪犯 (并查集)

    先从大到小排序,看到哪个的时候安排不开了 给每个人拆成两个,如果x和y有矛盾,就给x和y‘.y和x’连边:如果a和b(或a'和b')在同一个集合里,说明他们一定要在同一个监狱里. #include&l ...

随机推荐

  1. 【codevs1306】广播操的游戏

    求字符串内的非空子串的数量 后缀数组!!! #include<algorithm> #include<cstdlib> #include<cstring> #inc ...

  2. 2.eclipse 插件安装烦死人(2)

    安装插件的实际结果是:(烦死人),要不是很多插件找不到,要不就是版本不对,要不就是下载了装上没有效果,要不就是在线安装(速度爆慢),好不容易等到结果了,结果是些错…… 最后我的eclipse 3.5. ...

  3. 关于Time Series Database

    今天观察了下clojure之父datomic.com的数据库 有点类似sequence数据库的变种 不过这类数据库,感觉用在移动端会更有市场: 1. 移动端需要这种可以本地存储,无删除,联网只增加,只 ...

  4. Potentiometers

    题意: 线段树的单点修改,区间查询 #include <map> #include <set> #include <list> #include <cmath ...

  5. 并不对劲的[noi2006]网络收费

    题目略长,就从大视野上复制了. 听上去好像费用流,然而…… ***************************表示略长的题目的分界线************************ 1495: [ ...

  6. iPhone各尺寸 app界面设计尺寸规范

    ip6: 375 * 667 pt @2x   ~ 750 x 1334 ip6+: 414 * 736 pt @3x ~ 1242 x 2208 ip5: 320 * 568 pt  @2x ~ 6 ...

  7. P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm(Tarjan+记忆化)

    P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N< ...

  8. 一些常见的iOS面试问题,一眼就能看出 初级和高级工程师的区别

    前言 面试题中有一些一般性的问题,通常是会问到的.面试iOS应聘者时,切入点很重要,不同的切入点会导致不同的结果,没有找到合适的切入点也无法对应聘者有一个全面的了解. 所以下面的面试问题更多的是提供方 ...

  9. python re的使用

    re 正则表达式操作  本模块提供了类似于Perl的正则表达式匹配操作.要匹配的模式和字符串可以是Unicode字符串以及8位字符串. 正则表达式使用反斜杠字符('\')来表示特殊的形式或者来允许使用 ...

  10. codechef: BINARY, Binary Movements

    非常有毛病的一道题,我一个一个读字符死活过不去,改成整行整行读就 A 了... 做法就是...最小点覆盖... 我们发现可以把一个点向上跳看做被吃掉了,然后最顶层的点是无法向上跳所以不能被吃掉,然后被 ...