#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
typedef vector<int> VI;
const int mod = 1e8;
using ull = unsigned long long;
int n,m;
int f[101000];
int ct[101000];
int res = -0x3f3f3f3f ;
//查找并查集的
int fin(int x){
if(x != f[x]){
x = fin(f[x]);
}
return f[x];
}
int add(int x,int y){
int fx = fin(x);
int fy = fin(y);
if(fx != fy){
f[fy] = fx;
ct[fx] += ct[fy];
}
if(ct[fx] == n){
return 1;
}
return 0;
}
struct road{
int x,y,t;
bool operator <(const road &u) const{
return t < u.t;
}
}r[101000];
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y,t;
cin>>r[i].x>>r[i].y>>r[i].t;
}
sort(r+1,r+1+m);
for(int i=1;i<=n;i++){
f[i] = i;
ct[i] = 1;
}
for(int i=1;i<=m;i++){
int t = add(r[i].x,r[i].y);
if(t){
printf("%d" , r[i].t);
return 0;
}
}
cout<<-1;
}
并查集中维护连通块中点的数量,无非就是多开一个数组维护点的数量
水一发