题目链接:
https://www.luogu.com.cn/problem/P1525
参考博客:
https://www.luogu.com.cn/blog/chtholly20094/solution-p1525
这个博客写的很棒,建议复习时再看
算法:
并查集
思路:
1:并查集:但因为它们带有权值,因此排序是必须的,我们要尽可能让危害大的罪犯在两个监狱里
2:那么,再结合敌人的敌人和自己在一个监狱的规律合并
3:当查找时发现其中两个罪犯不可避免地碰撞到一起时,只能将其输出并结束;没有冲突时输出0
#include <bits/stdc++.h>
using namespace std;
struct date//结构体便于排序的变换
{
int x,y,z;
}f[100002];
int n,m,a[20002],b[20002],i;
inline void init()
{
for(int i=1;i<=n;i++)
a[i]=i;
}
inline bool cmp(date a,date b)//重写cmp函数
{
return a.z>b.z;
}
inline int find(int x)
{
if(a[x]!=x)a[x]=find