zoukankan      html  css  js  c++  java
  • hdu1829 A Bug's Life(并查集)

    开两个并查集。然后合并的时候要合并两次。这样在合并之前推断是否冲突,假设不冲突就进行合并,否则不须要继续合并。

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int MAX=2000;
    int pre[2*MAX+5];
    bool mark;
    void init(int n){
        int i;
        for(i=1;i<=MAX+n;i++) pre[i]=i;
        mark=true;
    }
    int root(int x){
        if(x!=pre[x]){
            pre[x]=root(pre[x]);
        }
        return pre[x];
    }
    void merge(int x,int y){
        int fx,fy;
        fx=root(x);
        fy=root(y-MAX);
        if(fx==fy) {
            mark=false;
            return;
        }
        fy=root(y);
        if(fx!=fy){
            pre[fx]=pre[fy];
        }
    }
    int main()
    {
        int t,i,n,m,x,y,k;
        scanf("%d",&t);
        for(i=1;i<=t;i++){
            scanf("%d%d",&n,&m);
            init(n);
            for(k=1;k<=m;k++){
                scanf("%d%d",&x,&y);
                if(mark){
                    merge(x,y+MAX);
                    merge(y,x+MAX);
                }
            }
           printf("Scenario #%d:
    ",i);
            if(mark){
                printf("No suspicious bugs found!
    ");
            }else{
                printf("Suspicious bugs found!
    ");
            }
            printf("
    ");
        }
        return 0;
    }
    


  • 相关阅读:
    作业5,6 2019/10/23
    作业1、2、3、4 2019/10/23
    实现Map传参Mybatis
    maven工程配置pom.xml实现mybatis的访问数据库操作
    测试
    Postman篇之命令行测试
    unittest框架
    测试
    测试
    测试
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6984351.html
Copyright © 2011-2022 走看看