http://acm.hust.edu.cn/vjudge/contest/121379#problem/J
题意:让你看是否有同性恋,比如a和b,b和c,c和a分别交配,那么肯定产生了同性恋。规定同性恋是0,非同性恋是1。
完全模仿食物链的代码。。
#include#include #include #include #include #include using namespace std;#define maxn 2100int father[maxn], r[maxn];int Find(int x){ if(x!=father[x]) { int k = father[x]; father[x] = Find(father[x]); r[x] = (r[x]+r[k])%2; } return father[x];}int main(){ int T, n, m, a, b,t=1; scanf("%d", &T); while(T--) { int flag = 0; scanf("%d %d", &n, &m); for(int i=0; i<=n; i++) father[i] = i; memset(r, 0, sizeof(r)); while(m --) { scanf("%d %d", &a, &b); if(flag) continue; int ra = Find(a); int rb = Find(b); if(ra == rb && (r[b]+1)%2!=r[a]) flag=1; else if(ra!=rb) { father[ra]=rb; r[ra]=(1-r[a]+r[b]+2)%2; } } if(t != 1)printf("\n"); printf("Scenario #%d:\n", t++); if(flag)printf("Suspicious bugs found!\n"); else printf("No suspicious bugs found!\n"); } return 0;}