zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    UML画图
    UML笔记
    电脑启动顺序
    评教有感
    部署图
    活动图
    给八期授课之主板电池的思考
    给八期授课之人员分配的思考
    构件图
    cocos2dx获得机器语言
  • 原文地址:https://www.cnblogs.com/starve/p/11503477.html
Copyright © 2011-2022 走看看