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