• 2010提高组-C]关押罪犯(扩展域并查集


    题:https://www.cometoj.com/problem/0073

    #include<bits/stdc++.h>
    using namespace std;
    const int M=1e5+4;
    struct node{
        int u,v,w;
    }e[M];
    int f[M];
    bool cmp(node p,node q){
        return p.w>q.w;
    }
    int find(int x){
        return f[x]==x?x:f[x]=find(f[x]);
    }
    int main(){
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++){
            scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
        }
        sort(e+1,e+1+m,cmp);
        for(int i=1;i<=2*n;i++)
            f[i]=i;
        for(int i=1;i<=m;i++){
            int u=e[i].u,v=e[i].v;
            int uu=e[i].u+n,vv=e[i].v+n;
            int a=find(u),b=find(v);
            int aa=find(uu),bb=find(vv);
            if(a==b){
                return printf("%d
    ",e[i].w),0;
            }
            else {
                if(a!=bb)
                    f[a]=bb;
                if(aa!=b)
                    f[aa]=b;
            }
        }
        printf("0
    ");
        return 0;
    }
    View Code

    把每个人拆成两个点分别表示与这个人一个监狱的集合和与这个人不同监狱的集合即可。

  • 相关阅读:
    简述对vuex的理解
    Vuex总结--是什么?有什么?怎么用?
    Vuex总结
    在vue中,methods和computed这两个方法的区别。
    关于vuex
    生命周期的钩子函数
    vuex 的理解
    Linux 安装kubectl
    python装饰器
    MySQL事务
  • 原文地址:https://www.cnblogs.com/starve/p/11503477.html
Copyright © 2020-2023  润新知