比赛 暑期小训练题 评测结果 AAAAAAAAAA
题目名称 修复公路 最终得分 100
用户昵称 ムラサメ 运行时间 0.478 s
代码语言 C++ 内存使用 4.13 MiB
提交时间 2021-07-10 17:28:40
显示代码纯文本
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1050;
    const int maxm=100050;
    int fa[maxn];
    int n,m;
    struct node{
        int x,y,z;
    }e[maxm];
    int cmp(node a,node b){
        return a.z<b.z;
    }
    int Find(int x){
        if(x!=fa[x])return fa[x]=Find(fa[x]);
        return fa[x];
    }
    int main(){
        freopen("roada.in","r",stdin);
        freopen("roada.out","w",stdout);
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            fa[i]=i;
        }
        for(int i=1;i<=m;i++){
            cin>>e[i].x>>e[i].y>>e[i].z;
        }
        sort(e+1,e+1+m,cmp);
        int num=0,tot=0;
        for(int i=1;i<=m;i++){
            int u=Find(e[i].x),v=Find(e[i].y);
            if(u!=v){
                fa[u]=v;
                num++;
                tot=max(tot,e[i].z);
            }
        }
        if(num>=n-1){
            cout<<tot<<endl;
        }
        else{
            cout<<-1<<endl;
        }
        return 0;
    }