P1525 关押罪犯
#include<cstdio>
#include<iostream>
//#include<bits/stdc++.h>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,p,par[300001],b[30001];
//初始化n个元素
struct ele{
int a,b,p;
}ele[300001];
bool cmp(struct ele &x,struct ele &y){
return x.p>y.p;
}
void init(int n){
for(int i=1;i<=n;i++){
par[i]=i;
}
}
int find(int x){
if(par[x]==x){
return x;
}else{
return par[x]=find(par[x]);
}
}
void unite(int x,int y){
x=find(x);
y=find(y);
if(x==y)
return;
if(x!=y){
par[x]=y;
}
}
bool same(int x,int y){
return find(x)==find(y);
}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d%d",&n,&m);
init(n);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&ele[i].a,&ele[i].b,&ele[i].p);
}
sort(ele+1,ele+m+1,cmp);
for(int i=1;i<=m+1;i++){
if(find(ele[i].a)==find(ele[i].b)){
printf("%d",ele[i].p);
break;
}else{
if(!b[ele[i].a])//标记“敌人”
b[ele[i].a]=ele[i].b;
else{
unite(b[ele[i].a],ele[i].b);//将敌人的敌人合并
}
if(!b[ele[i].b])
b[ele[i].b]=ele[i].a;
else{
unite(b[ele[i].b],ele[i].a);
}
}
}
return 0;
}
Sample Input
4 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884
Sample Ouput
3512