题目传送门sx
从小到大排序
并查集来连接连通块,每连接一个总量减一,直到减为一,输出
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=100010;
int n,m,s,fa[N];
struct st{
int x,y,t;
}nod[N];
int read(){int s=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){s=s*10+c-'0';c=getchar();}return f*s;}
int find(int x){if(x!=fa[x]) fa[x]=find(fa[x]);return fa[x];}
bool cmp(const st &a,const st &b){return a.t<b.t;}
int main()
{
n=read();m=read();s=n;
for(int i=1;i<=m;++i){
nod[i].x=read();nod[i].y=read();nod[i].t=read();
}
for(int i=1;i<=n;i++) fa[i]=i;
sort(nod+1,nod+m+1,cmp);
for(int i=1;i<=m;i++){
int u=nod[i].x,v=nod[i].y;
int x=find(u),y=find(v);
if(x!=y) fa[y]=x,--s;
if(s==1) {cout<<nod[i].t;return 0;}
}
cout<<"-1";
return 0;
}