我们用一个并查集来表示有没有环,然后采用kruskal算法构建最小生成树,最后将最长的边输出就行。
#include <iostream>
#include <algorithm>
using namespace std;
int fa[2002];
struct node{
int a,b;
int value;
};
bool cmp(node m,node n){
return m.value<n.value;
}
int find(int num){
if(fa[num]==num){
return num;
}else{
while(fa[num]!=num){
num=fa[num]=fa[fa[num]];
}
return num;
}
}
int main() {
node bian[10005];
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
fa[i]=i;
}
for(int i=0;i<m;i++){
cin>>bian[i].a>>bian[i].b>>bian[i].value;
//cout<<bian[i].value<<endl;
}
sort(bian,bian+m,cmp);
/*
for(int i=0;i<m;i++){
cout<<bian[i].value<<endl;
}
*/
int now=0;int max=0;
for(int i=0;i<n-1;i++){
int temp1=find(bian[now].a);
int temp2=find(bian[now].b);
if(temp1!=temp2){
fa[temp1]=temp2;
if(max<bian[now].value){
max=bian[now].value;
}
//cout<<max<<endl;
now++;
}else if(temp1==temp2){
i--;now++;
}
}
cout<<max<<endl;
return 0;
}