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;  

}


你可能感兴趣的:(life)