POJ 2492 并查集 A Bug's Life

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#include<limits.h>
#include<math.h>
#include<queue>
#include<stack>
#define max(a, b) a>b?a:b;
#define min(a, b) a<b?a:b;
using namespace std;
const int N = 2010;
int f[N], r[N];
int Find(int x);
int main()
{
    int t, n, m, a, b;
    scanf("%d", &t);
    for(int ans=1; ans<=t; ans++)
    {
        int flag=0;
        scanf("%d%d", &n, &m);
        for(int i=0; i<=n; i++)
        {
            f[i]=i;
            r[i]=0;
        }
        for(int i=0; i<m; i++)
        {
            scanf("%d%d", &a, &b);
            int ra=Find(a);
            int rb=Find(b);
            if(ra==rb && r[a]==r[b])
            {
                flag=1;
            }
            else if(ra!=rb)
            {
                f[ra]=rb;
                //r[ra]=(1-r[a]+r[b])%2;
                r[ra] = r[a]^r[b]^1;
            }
        }
        printf("Scenario #%d:\n", ans);
        if(flag==1)
        {
            printf("Suspicious bugs found!\n\n");
        }
        else
        {
            printf("No suspicious bugs found!\n\n");
        }
    }
    return 0;
}
int Find(int x)
{
    int k=f[x];
    if(f[x]!=x)
    {
        f[x]=Find(f[x]);
        r[x]=(r[k]+r[x])%2;
    }
    return f[x];
}

 

 
 
posted @ 2015-07-25 08:26  花开须臾  阅读(160)  评论(0编辑  收藏  举报