• A Bug's Life HDU


    //有n个成员,并查集开两倍空间
    //1~n为一组, n+1~2n为一组。a与b互斥,则a与b反(即b+n)为同一集合,
    //同时b与a反(a+n)为同一集合
    
    //在union操作中,引入w ,w越大,表面它的根连接的点越多 
    //合并时确立关系 
    #include<iostream>
    using namespace std;
    const int N=1e6;
    int p[N];
    int w[N];
    int find(int x)
    {
        if(p[x]!=x)
            p[x]=find(p[x]);
        return p[x];
    }
    void unite(int x, int y)
    {
        int px=find(x),py=find(y);
        if (px==py) 
            return;
        else if(w[px]>w[py])
            p[py] = px;
        else
        {
            p[px]=py;
            if (w[px]==w[py]) 
                w[py]+=w[px];
        }
    }
    bool judge(int x,int y)
    {
        int px=find(x);
        int py=find(y);
        return px==py;
    }
    int main()
    {
        int t;
        cin>>t;
        int cnt=0;
        int n,m;
        while(t--)
        {
            bool flag=1;
            cin>>n>>m;
            for(int i=1;i<=2*n;i++)
                p[i]=i,w[i]=1;
            int a,b;
            for(int i=0;i<m;i++)
            {
                cin>>a>>b;
                if (judge(a,b)||judge(a,b+n))
                {
                    if (judge(a,b))
                        flag=false;
                    //是异性则符合条件继续 
                    else 
                        continue;
                }
                else
                {
                    unite(a, b+n);
                    unite(a+n, b);
                }
            }
            printf("Scenario #%d:
    ",++cnt);
            if(!flag) 
                printf("Suspicious bugs found!
    
    ");
            else 
                printf("No suspicious bugs found!
    
    ");
        }
    }
  • 相关阅读:
    js实现观察者模式
    磁盘阵列操作实战
    淘宝知名工程师
    Java线程并发控制基础知识
    java多线程总结
    NIO系列1:框架拆解
    Java NIO 系列教程
    Java NIO系列教程(三-十二) Buffer
    Java NIO系列教程(二) Channel
    Java NIO系列教程(一) Java NIO 概述
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12283216.html
Copyright © 2020-2023  润新知