POJ2492A Bug's Life【并查集+根节点偏移】
2014-10-17 16:42
127 查看
大意:
告诉你一些关系
a b 代表 a 和 b 是异性
问这些关系中有没有错误的语句
分析:
有并查集维护其是否在同一个集合之中 在开一个num数组来维护对于根节点的偏移量
在find的时候只需要递归到根节点返回的过程中把num数组进行维护就可以了
在进行合并的时候我们需要考虑到把一个点的根节点并到另一个的根节点上
所以要根据u和v的偏移关系推广到u和v的根节点的关系之上
代码:
View Code
告诉你一些关系
a b 代表 a 和 b 是异性
问这些关系中有没有错误的语句
分析:
有并查集维护其是否在同一个集合之中 在开一个num数组来维护对于根节点的偏移量
在find的时候只需要递归到根节点返回的过程中把num数组进行维护就可以了
在进行合并的时候我们需要考虑到把一个点的根节点并到另一个的根节点上
所以要根据u和v的偏移关系推广到u和v的根节点的关系之上
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn = 2005; int fa[maxn], num[maxn]; void init(int n) { for(int i = 0; i <= n; i++) { fa[i] = i; num[i] = 0; } } int find(int i) { if(i == fa[i]) { return i; } int fi = fa[i]; fa[i] = find(fa[i]); num[i] = (num[fi] + num[i]) % 2; return fa[i]; } void unin(int u, int v) { int fu = find(u); int fv = find(v); if(fu != fv) { fa[fv] = fu; if(num[fu] == num[u]) { if(num[fv] == num[v]) { num[fv] = num[fu] == 0 ? 1 : 0; } else { num[fv] = num[fu] == 0 ? 0 : 1; } } else { if(num[fv] == num[v]) { num[fv] = num[fu] == 0 ? 0 : 1; } else { num[fv] = num[fu] == 0 ? 1 : 0; } } } } int main() { int t; int n, m; int a, b; scanf("%d",&t); for(int kase = 1; kase <= t; kase++) { scanf("%d %d",&n, &m); init(n); bool flag = false; while(m--) { scanf("%d %d", &a, &b); if(find(a) != find(b) ) { unin(a, b); } else { if(num[a] == num[b]) { flag = true; } } } printf("Scenario #%d:\n", kase); if(flag) { puts("Suspicious bugs found!"); } else { puts("No suspicious bugs found!"); } puts(""); } return 0; }
View Code
相关文章推荐
- POJ2492A Bug's Life【并查集+根节点偏移】
- 【进阶——种类并查集】hdu 1829 A Bug's Life (基础种类并查集)TUD Programming Contest 2005, Darmstadt, Germany
- POJ 2492 A Bug's Life(并查集)
- POJ 2492 A Bug's Life(并查集)
- POJ1182食物链【并查集+根节点的偏移】
- A Bug's Life(种类并查集)(也是可以用dfs做)
- HDU1829 A Bug's Life 并查集
- poj 2492 A Bug's Life (并查集)
- POJ 2492 (简单并查集) A Bug's Life
- POJ 2492 A Bug's Life 并查集的应用
- POJ 2492 A Bug's Life (并查集应用的扩展)
- POJ 2492 A Bug's Life 带权并查集
- POJ 2492 A Bug's Life (并查集)
- A Bug's Life(hdu1829种类并查集)
- poj2492_A Bug's Life_并查集
- hdu 1829 A Bug's Life (并查集)
- hdoj--1829--A Bug's Life(带权并查集)
- POJ2492-A Bug's Life-并查集扩展应用
- 并查集(种类并查集)POJ2492A Bug's Life解题报告
- hdu 1829 A Bug's Life 并查集系列