poj2492种类并查集
来源:互联网 发布:mac gradle 安装路径 编辑:程序博客网 时间:2024/05/16 08:00
种类并查集的应用
题意:有n只bug,下边给出m对关系,每对关系都表示他们能相互交配,判断其中是否有同性恋。
思路:典型种类并查集,一共有两类:男女。对于每只bug,创建两个元素:i-A,i-B。并用2*n个元素的并查集
维护。
1.i-x表示i属于种类x
2.并查集里到达每一个组表示组内所有元素代表的情况都同时发生或者不发生
维护。
1.i-x表示i属于种类x
2.并查集里到达每一个组表示组内所有元素代表的情况都同时发生或者不发生
输入的u,v如果是同一性别(下边维护的两种情况,因此此处只需要判断一个即可),则结果为有同性恋,出现矛盾。
否则,合并(u,v+n),(u+n,v)。(由于两种性别的相对性)
否则,合并(u,v+n),(u+n,v)。(由于两种性别的相对性)
wa的原因:初始化的时候f[]只初始化了n个,正确应该是2*n个
#include <cstdio>#define N 2005using namespace std;int f[2 * N];int n, m;void init(){for (int i = 1; i <= 2 * n; i++)f[i] = i;}int find(int x){return x == f[x] ? x : f[x] = find(f[x]);}void merge(int x, int y){int t1 = find(x), t2 = find(y);if (t1 != t2)f[t2] = t1;}int same(int x, int y){return find(x) == find(y);}int main(){int T,cas = 0;scanf("%d", &T);while (T--){int flag = 1, u, v;scanf("%d%d", &n, &m);init();for (int i = 0; i < m; i++){scanf("%d%d", &u, &v);if (same(u, v))//没有考虑same(a + n, b + n),是因为下边每次维护两种情况。flag = 0;else//由于相对性,每次维护两种{merge(u, v + n);merge(u + n, v);}}if (cas)printf("\n");printf("Scenario #%d:\n", ++cas);if (flag)printf("No suspicious bugs found!\n");elseprintf("Suspicious bugs found!\n");}return 0;}
0 0
- POJ2492(种类并查集)
- poj2492种类并查集
- poj2492 poj1182种类并查集
- poj2492 A Bug's Life 种类并查集
- POJ2492 -A Bug's Life(种类并查集)
- poj2492并查集
- poj2492(并查集)
- poj2492并查集
- POJ2492(并查集)
- poj2492 + 并查集
- POJ2492 并查集
- poj2492(并查集)
- POJ1703 POJ2492 并查集
- poj2492 A bug's life{种类并查集}
- POJ2492(A Bug's Life) && POJ1703(Find them, Catch them)带权(种类)并查集
- POJ2492 并查集的拓展
- poj2492-并查集基于分组
- 带权并查集 POJ1988 POJ2492
- Linux学习总结05——进程环境
- Windows下搭建appium+python的测试开发环境
- DHCP协议与dhcpcd分析
- NestScrollView嵌套recyclerview嵌套卡顿的解决方式
- lie or fact
- poj2492种类并查集
- 在jmeter测试mysql中如何一次运行多条sql语句
- Codeforces 246C Little Girl And Maximum 差分
- Beehive----思维题
- Linux编程之ICMP洪水攻击
- Hibernate中的核心接口query接口用法
- R语言 聚类分析
- poj2236并查集简单应用
- 手机APP测试之ADB常见问题解决方法