您的位置:首页 > Web前端

Poj 2492 A Bug's Life(带权并查集)(水)

2016-07-23 16:13 375 查看
这道题还是很快就写出来了,之前也做过好几道类似的题目,不过输出略坑~

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

const int maxn = 2e4+5;
int father[maxn],Rank[maxn],n,m;

int query(int x) {
if(x != father[x]) {
int per = father[x];
father[x] = query(father[x]);
Rank[x] = (Rank[x] + Rank[per] + 2) % 2;
}
return father[x];
}

int main() {
int tt;
scanf("%d",&tt);
for(int k = 1;k <= tt;k++) {
scanf("%d%d",&n,&m);
for(int i = 0;i <= n;i++) {
father[i] = i;
Rank[i] = 0;
}
int x,y,flag = 1;
for(int i = 1;i <= m;i++) {
scanf("%d%d",&x,&y);
if(flag) {
int a = query(x);
int b = query(y);
if(a == b) {
if((Rank[y] - Rank[x] + 2) % 2 == 0)
flag = 0;
}
else {
father[b] = a;
Rank[b] = (Rank[x] - Rank[y] + 3) % 2;
}
}
}
if(flag)
printf("Scenario #%d:\nNo suspicious bugs found!\n\n",k); //每组输出空一行
else
printf("Scenario #%d:\nSuspicious bugs found!\n\n",k);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  带权并查集