// 1930 - 关押罪犯 --- 种类并查集
// 来源: 东方博宜oj oj.czos.cn
// 补充:noip提高组复赛 并查集
#include<bits/stdc++.h>
using namespace std;
const int N=2e4+10,M=1e5+10;
int n,m;
// a和b是敌人,怨气值为c
struct node
{
int a,b,c;
}e[M];
int f[2*N];
// 查询
int findd(int x)
{
return x==f[x]? x:f[x]=findd(f[x]);
}
// 合并
void mergee(int x,int y)
{
int fx=findd(x);
int fy=findd(y);
if(fx!=fy) f[fx]=fy;
}
// 将怨气值降序排序
bool cmp(node x1,node x2)
{
return x1.c>x2.c;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n*2;i++) f[i]=i; //初始化
for(int i=1;i<=m;i++) cin>>e[i].a>>e[i].b>>e[i].c;
// 将怨气值降序排序,从最大的开始拆分
sort(e+1,e+1+m,cmp);
for(int i=1;i<=m;i++)
{
// 如果发现2个人已经在一座监狱,必定有冲突
if(findd(e[i].a)==findd(e[i].b))
{
cout<< e[i].c;
return 0;
}
else
{
// 将每个人和其假想的好友和合并
mergee(e[i].b+n,e[i].a);
mergee(e[i].a+n,e[i].b);
}
}
cout<< 0;
return 0;
}
1930 - 关押罪犯 --- 种类并查集
于 2023-02-14 19:39:55 首次发布