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;  

}spa

相關文章
相關標籤/搜索