这道题的数据过水,我用二分(没有单调性)直接过了:
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct f{int x,y,k;}a[2000005];
int fa[1000005];
int find(int x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
int pd(int x){
for(int i=1;i<=n;i++){fa[i]=i;}
for(int i=1;i<=m;i++){if(a[i].k==x) continue;fa[find(a[i].x)]=find(a[i].y);}
for(int i=2;i<=n;i++){if(find(i)!=find(1))return 0;}
return 1;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){cin>>a[i].x>>a[i].y>>a[i].k;}
int l=0,r=100000,ans=100001;
while(l<=r){
int mid=(l+r)/2;
if(pd(mid)) r=mid-1,ans=mid;
else l=mid+1;
}
cout<<ans;
return 0;
}
但是
3 2
1 2 0
2 3 2
本来因该输出 1,但我输出 3,建议加强数据。