P1525 关押罪犯
题面:https://www.luogu.org/problem/P1525
本题是一个很明显的种类并查集(带权并查集),只要尽可能让危害大的罪犯在两个监狱里即可,遇到不满足条件的就输出答案.
Code:
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
using namespace std;
const int N=100005;
int n,m,fa[N];
struct Node{
int a,b,c;
}cri[N];
bool cmp(Node x,Node y){
return x.c>y.c;
}
int find(int x){
if(fa[x]==x){
return x;
}
return fa[x]=find(fa[x]);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&cri[i].a,&cri[i].b,&cri[i].c);
}
sort(cri+1,cri+1+m,cmp);
for(int i=1;i<=n;i++){
fa[i]=i;
fa[i+n]=i+n;
}
for(int i=1;i<=m;i++){
int x=cri[i].a,y=cri[i].b;
if(find(x)==find(y)||find(x+n)==find(y+n)){
printf("%d\n",cri[i].c);
return 0;
}
fa[find(x+n)]=find(y);
fa[find(x)]=find(y+n);
}
printf("0\n");
return 0;
}