您的位置:首页 > Web前端

HDU 1829 - A Bug's Life

2017-09-06 15:55 405 查看
题目大意:有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++);
else
printf("Scenario #%d:\nNo suspicious bugs found!\n", cnt++);
if (t)
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: