题目大意:有n只虫子,m对情侣,问其中是否有同性恋,一般虫子异性恋。
解题思路:与食物链那题有些相似,但又比那题简单许多。因为只有两种关系了,0为同性,1为异性,所以查找和合并时的关系变更尝试推一下就出来了。具体的详讲看POJ-1182
ac代码:
#include <iostream>
#include <cstring>
using namespace std;
struct node{int pre;int sex;
}an[2005];
int t1, t2, flag, t, n, m, cnt=1;
int find(int x)
{int r;if (x != an[x].pre){r = an[x].pre;an[x].pre = find(an[x].pre);an[x].sex = (an[x].sex + an[r].sex) % 2;}
return an[x].pre;
}
void join(int x, int y)
{int fx=find(x), fy=find(y);if (fx == fy){if (an[x].sex == an[y].sex)flag = 1;}else{an[fx].pre = fy;an[fx].sex = (an[y].sex -an[x].sex + 1) % 2;}
}
int main()
{scanf("%d", &t);while (t--){scanf("%d%d", &n, &m);flag = 0;for (int i=1; i<=n; i++){an[i].pre = i;an[i].sex = 0; }for (int i=0; i<m; i++){scanf("%d%d", &t1, &t2);join(t1, t2);}if (flag)printf("Scenario #%d:\nSuspicious bugs found!\n", cnt++);elseprintf("Scenario #%d:\nNo suspicious bugs found!\n", cnt++);if (t)printf("\n");}
return 0;
}