您的位置:首页 > Web前端

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

2014-04-17 21:57 453 查看
题目链接:A Bug's Life

带权并查集,0表示同性,1表示异性

代码:

#include <stdio.h>
#include <string.h>

const int N = 2005;
int t, n, m, parent
, rank
;

void init() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
parent[i] = i;
rank[i] = 0;
}
}

int find(int x) {
if (x == parent[x])
return x;
int px = find(parent[x]);
rank[x] = ((rank[x] + rank[parent[x]])&1);
return parent[x] = px;
}

bool judge() {
int flag = 0, a, b;
while (m--) {
scanf("%d%d", &a, &b);
int pa = find(a);
int pb = find(b);
if (pa != pb) {
parent[pa] = pb;
if (rank[b] == 0)
rank[pa] = 1 - rank[a];
else
rank[pa] = rank[a];
}
else {
if (rank[a] == rank[b])
flag = 1;
}
}
return flag;
}

int main() {
int cas = 0;
scanf("%d", &t);
while (t--) {
printf("Scenario #%d:\n", ++cas);
init();
if (judge()) printf("Suspicious bugs found!\n");
else printf("No suspicious bugs found!\n");
if (t) printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: