#2019120500017-LG 修复公路

\(P1111\) 并查集 修复公路

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>

using namespace std;
const int N=1e6+5;
int dzx[N],siz[N];
int find (int x){
    if(dzx[x]==x) return x;
    else return dzx[x]=find(dzx[x]);
}
struct name{
    int x,y,t;
}a[N];

bool cmp(name s,name t){
    return s.t<t.t;//?
}
int n,m;

int main( ){
    scanf("%d%d",&n,&m);
    //int x,y,t;
    for(int i=1;i<=m;i++){
        scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].t);
    }
    for(int i=1;i<=n;i++) dzx[i]=i,siz[i]=1;
    sort(a+1,a+m+1,cmp);
    for(int i=1;i<=m;i++){
        if(find(a[i].x)==find(a[i].y)) continue;
        int q=dzx[a[i].x],w=dzx[a[i].y];
        if(siz[q]<siz[w]) dzx[q]=w,siz[w]+=siz[q];
        else dzx[w]=q,siz[q]+=siz[w];
        if(siz[find(1)]==n){
            printf("%d",a[i].t);
            return 0;
        }
        
    }
    puts("-1");
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/liuziwen0224/p/11992465.html