洛谷P1111 修复公路只过了样例和第一个点,求大亻老指点
#include <bits/stdc++.h>
using namespace std;
long long N,M;
long long b[1002],s[1002];
struct XX{
long long x;
long long y;
long long t;
};
bool cmp(XX x,XX y){
return x.t<y.t;
}
long long cha(long long x){
if(b[x]==x){
return x;
}
return b[x]=cha(b[x]);
}
bool pan(long long x,long long y){
return cha(x)==cha(y);
}
void cun(long long x,long long y){
if(b[x]!=x&&b[y]!=y){
b[max(cha(x),cha(y))]=min(cha(x),cha(y));
s[min(cha(x),cha(y))]+=s[max(cha(x),cha(y))];
}
else
if(b[x]!=x&&b[y]==y){
b[y]=cha(x);
b[y]+=1;
}
else
if(b[x]==x&&b[y]!=y){
b[x]=cha(y);
b[x]+=1;
}
b[y]=cha(x);
s[b[y]]+=s[y];
}
int main(){
cin>>N>>M;
XX X[M+1];
for(long long i=0;i<M;i++){
cin>>X[i].x>>X[i].y>>X[i].t;
}
sort(X,X+M,cmp);
for(long long i=1;i<=N;i++){
b[i]=i;
s[i]=1;
}
long long ans=0;
for(long long i=0;i<M;i++){
ans=max(ans,X[i].t);
//cout<<"X[i].t:"<<X[i].t<<endl;
cun(X[i].x,X[i].y);
//cout<<"cha(X[i].x):"<<cha(X[i].x)<<endl;
//cout<<"s[cha(X[i].x)]:"<<s[cha(X[i].x)]<<endl;
//cout<<"ans:"<<ans<<endl;
if(s[cha(X[i].x)]>=N){
cout<<ans;
return 0;
}
}
cout<<-1;
return 0;
}