社区讨论

10分求助(用了并查集)

P1111修复公路参与者 6已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@lo2gss2g
此快照首次捕获于
2023/10/23 13:36
2 年前
此快照最后确认于
2023/10/23 13:36
2 年前
查看原帖
CPP
#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;
}
 

回复

10 条回复,欢迎继续交流。

正在加载回复...