目前已知num最后等于3(就是还有两个村庄未连接)
Code:
#include<bits/stdc++.h>
using namespace std;
int ans,num;
struct cat{
int x,y,t;
}road[100000];
int dot[100000];//是表示点所在集合
bool cmp(cat &a,cat &b){
return(a.t<b.t);
}
int find(int f){
while(dot[f]!=f){
f=dot[f];
}
return f;
}
bool into(int a,int b){
int in1=find(a),in2=find(b);
if(in1!=in2){
dot[in1]=in2;
return 1;//本来没连接
}
return 0;
}
int main(){
int n,m;
// freopen("P1111_2.in","r",stdin);
cin>>n>>m;
num=n;
for(int i=1;i<=n;i++){
dot[i]=i;//每个集合都只有自己
}
for(int i=1;i<=m;i++){
int x,y,t;
cin>>x>>y>>t;
road[i].x=x;
road[i].y=y;
road[i].t=t;
}
sort(road+1,road+m+1,cmp);//排序
for(int i=1;i<=m;i++){
if(into(road[i].x,road[i].y)){//如果从 x 到 y 这条路没修
ans=road[i].t;//修好它,改变ans值
// cout<<road[i].x<<' '<<road[i].y<<endl;//test
num--;//多一个村庄被连接
}
}
// cout<<num<<' ';
if(num>1){
cout<<-1;
return 0;
}
cout<<ans;
return 0;
}
且神奇的是,ans最终是个负数(用过long long了)