题目描述
Bessie计划调查N(2≤N≤2000)个农场的干草情况,它从1号农场出发。农场之间总共有M(1≤M≤10^4)条双向道路,所有道路的总长度不超过10^9。有些农场之间存在着多条道路,所有的农场之间都是连通的。
Bessie 希望计算出该图中最小生成树中的最长边的长度。
输入格式
第一行两个整数N,M。
接下来M行,每行三个用空格隔开的整数Ai,Bi,Li,表示Ai、Bi之间有一条道路,长度为 Li。
输出格式
一个整数,表示最小生成树中的最长边的长度。
样例输入
3 3
1 2 23
2 3 1000
1 3 43
样例输出
43
AC代码
#include<bits/stdc++.h>
using namespace std;
struct no{
int a,b,l;
}e[1000010];
bool cmp(no a,no b){
return a.l<b.l;
}
int fa[1000010],n,m;
int find(int x){
if(x==fa[x])return x;
return fa[x]=find(fa[x]);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
fa[i]=i;
}
for(int i=1;i<=m;i++){
cin>>e[i].a>>e[i].b>>e[i].l;
}
sort(e+1,e+m+1,cmp);
long long ans=0;
for(int i=1;i<=m;i++){
int a=e[i].a,b=e[i].b,l=e[i].l;
int f1=find(a),f2=find(b);
if(f1==f2){
continue;
}
fa[f1]=f2;
if(l>ans){
ans=l;
}
}
cout<<ans;
return 0;
}