poj 2492(并查集)
来源:互联网 发布:杭州高达软件 编辑:程序博客网 时间:2024/05/18 02:45
题意:有一个科学家提出了一个假设,一种虫子只有异性恋,而不是同性恋,然后开始实验来验证猜想,给出了n个虫子,编号从1到n,给出了q组恋爱虫子的编号,问是否验证猜想。
题解:数组倍增,给每个虫子一个异性恋的对象集合,然后每次输入的两个虫子如果不在同一个集合内,就放到对方异性恋集合内,否则无法验证猜想。
#include <stdio.h>const int N = 4005;int n, q, pa[N];int get_parent(int x) { return x == pa[x] ? x : pa[x] = get_parent(pa[x]);}int main() { int t, cas = 1; scanf("%d", &t); while (t--) { scanf("%d%d", &n, &q); int nn = 2 * n; for (int i = 1; i <= nn; i++) pa[i] = i; int flag = 0; while (q--) { int a, b; scanf("%d%d", &a, &b); int px = get_parent(a); int py = get_parent(b); if (px == py) flag = 1; else { int t1 = get_parent(a + n); int t2 = get_parent(b + n); pa[px] = t2; pa[py] = t1; } } if (cas > 1) printf("\n"); printf("Scenario #%d:\n", cas++); if (flag) printf("Suspicious bugs found!\n"); else printf("No suspicious bugs found!\n"); } return 0;}
另一种做法,带权并查集,加一个数组rel[i]表示i和父节点是否是同性,寻找根节点时更新rel[i],如果发现输入的两个虫子是同一个根节点且与根节点关系相同,这两个虫子是同性恋,否则放到一个集合内,并更新其中一个虫子的根节点的rel。
#include <stdio.h>const int N = 4005;int n, q, pa[N], rel[N];int get_parent(int x, int &r) { int temp = x; r = 1; while (x != pa[x]) { if (rel[x] == 0) r = !r; x = pa[x]; } pa[temp] = x; rel[temp] = r; return pa[x];}int main() { int t, cas = 1; scanf("%d", &t); while (t--) { scanf("%d%d", &n, &q); for (int i = 1; i <= n; i++) { pa[i] = i; rel[i] = 1; } int flag = 0; while (q--) { int a, b, r1, r2; scanf("%d%d", &a, &b); int px = get_parent(a, r1); int py = get_parent(b, r2); if (px == py && r1 == r2) flag = 1; else { pa[py] = px; rel[py] = r1 == r2 ? 0 : 1; } } if (cas > 1) printf("\n"); printf("Scenario #%d:\n", cas++); if (flag) printf("Suspicious bugs found!\n"); else printf("No suspicious bugs found!\n"); } return 0;}
0 1
- POJ 2492 并查集
- POJ - 2492 并查集
- POJ 2492 (并查集)
- poj 2492(并查集)
- POJ 2492 并查集
- poj 2492(并查集)
- 【并查集】poj 2492
- Poj 并查集
- poj并查集
- POJ 并查集
- poj--1703/2492 (经典并查集)
- POJ 2492 并查集 注释版
- POJ 2492[带权并查集]
- hdu-1829 & poj-2492 并查集
- POJ-2492(并查集问题)
- 并查集的扩展 poj 2492
- POJ 1703 POJ 2492 并查集 和 食物链差不多
- poj 2524 并查集
- ViewPager+Fragment基本使用方法(附源码)
- android开发环境手动搭建
- JSP Filter,GZIP压缩响应流
- 迭代器
- Swift 动画效果
- poj 2492(并查集)
- 打印1到最大的n位数
- session原理及集群中session共享实现原理
- 渐变背景效果
- Git环境安装配置
- Win7运行程序总提示出现一个问题,导致程序停止正常工作。请关闭该程序?原来GreenBrowser下载有问题……
- UVa 10129 - Play on Words(欧拉道路)
- 协议(protocol)和委托(delegate)
- C++ 静态数据成员 成员函数 静态变量 全局变量(1)