J - A Bug's Life - poj2492

这个题目很有意思啊,有一些bug生物(肯定是程序员养的),有人观察他们的生活习惯,观察他们之间是否有同性恋关系,比如ab发生关系,bc发生关系,ab发生关系。。。产生了同性恋了,你需要判断一下这种关系是不是存在。
分析,这个跟食物链没什么区别,而且条件还少了不少,规定同性关系是0, 异性关系是1
//////////////////////////////////////////////////////////////////////

 #include <stdio.h>

#include<algorithm>
using namespace std;

const int maxn = 2005;

int f[maxn], relation[maxn];//0表示同性,1表示异性

int Find(int x)
{
    int k = f[x];
    if(f[x] != x)
    {
        f[x] = Find(f[x]);
        relation[x] = (relation[x]+relation[k])%2;
    }

    return f[x];
}

int main()
{
    int T, t=1;

    scanf("%d", &T);

    while(T--)
    {
        int i, N, M, u, v, ru, rv, ok = 0;

        scanf("%d%d", &N, &M);

        for(i=1; i<=N; i++)
            f[i] = i, relation[i] = 0;

        for(i=0; i<M; i++)
        {
            scanf("%d%d", &u, &v);

            if(ok)continue;

            ru = Find(u), rv = Find(v);

            if(ru == rv && (relation[v]+1)%2 != relation[u])
                ok = 1;
            else if(ru != rv)
            {
                f[ru] = rv;
                relation[ru] = (1-relation[u]+relation[v])%2;
            }
        }

        if(t != 1)printf("\n");
        printf("Scenario #%d:\n", t++);
        if(ok)printf("Suspicious bugs found!\n");
        else printf("No suspicious bugs found!\n");
    }

    return 0; 

}


posted @ 2015-07-23 10:14  无忧望月  阅读(187)  评论(0编辑  收藏  举报
levels of contents