代码
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
namespace Union_Find_Set{
#define MAXN 100005
int fa[MAXN];
void Initialize() {
for(int i=0;i<MAXN;i++){
fa[i]=i;
}
}
int Find(int x){
return fa[x]==x?x:fa[x]=Find(fa[x]);
}
void Union(int x,int y){
int a=Find(x),b=Find(y);
if(a>b){
fa[b]=a;
}else{
fa[a]=b;
}
}
}
struct Holder{
int a,b,c;
}p[100005];
int n,m,anti[100005];
int cmp(Holder x,Holder y){
return x.c>y.c;
}
int main(){
using namespace Union_Find_Set;
Initialize();
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);
}
sort(p+1,p+1+m,cmp);
for(int i=1;i<=m;i++){
int x=Find(p[i].a),y=Find(p[i].b);
if(x==y){
printf("%d",p[i].c);
return 0;
}
if(anti[p[i].a]==0) anti[p[i].a]=p[i].b;
if(anti[p[i].b]==0) anti[p[i].b]=p[i].a;
Union(anti[p[i].a],p[i].b);
Union(anti[p[i].b],p[i].a);
}
printf("0");
return 0;
}