poj 1703 Find them, Catch them 并查集
来源:互联网 发布:哈尔滨理工大学网络课 编辑:程序博客网 时间:2024/06/03 20:32
题目
题目链接:http://poj.org/problem?id=1703
题目来源:《挑战》练习题
简要题意:
N 个帮派可能属于两个大帮派,给定M 个询问,给出两个帮敌对,或者询问两个帮的关系。数据范围:
N⩽105;M⩽105
题解
这个和挑战上给出的例题非常相似,但是相比之下会简单不少。
扩大
fa 数组,变为两倍,然后n+x 表示x 的敌对关系。对于敌对的话就是去合并
x,y+n 还有x+n,y ,我的他的敌对一类,我的敌对和他一类。查询的时候
x,y 一类就是一帮,x,y+n 一类就是敌对,否则就是不确定。
代码
#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <cstring>#include <stack>#include <queue>#include <string>#include <vector>#include <set>#include <map>#define pb push_back#define mp make_pair#define all(x) (x).begin(),(x).end()#define sz(x) ((int)(x).size())#define fi first#define se secondusing namespace std;typedef long long LL;typedef vector<int> VI;typedef pair<int,int> PII;LL powmod(LL a,LL b, LL MOD) {LL res=1;a%=MOD;for(;b;b>>=1){if(b&1)res=res*a%MOD;a=a*a%MOD;}return res;}// headconst int N = 100000+5;int r[N*2];int fa[N*2];int find(int key) { return (key == fa[key]) ? key : (fa[key] = find(fa[key]));}void init(int n) { for (int i = 1; i <= n; i++) { r[i] = 0; fa[i] = i; }}void joint(int u, int v) { int a = find(u), b = find(v); if (a != b) { if (r[a] > r[b]) swap(a, b); fa[a] = b; if (r[a] == r[b]) r[b]++; }}bool same(int u, int v) { return find(u) == find(v);}char s[5];char out[3][25] = {"Not sure yet.", "In different gangs.", "In the same gang."};int main(){ int t, n, m, u, v; scanf("%d", &t); while (t--) { scanf("%d%d", &n, &m); init(n*2); for (int i = 0; i < m; i++) { scanf("%s%d%d", s, &u, &v); if (s[0] == 'A') { if (same(u, v)) { puts(out[2]); } else if (same(u, v+n)) { puts(out[1]); } else { puts(out[0]); } } else { joint(u, n+v); joint(v, n+u); } } } return 0;}
0 0
- POJ 1703 Find them, Catch them(并查集)
- POJ 1703 Find them, Catch them //并查集
- poj 1703 Find them, Catch them 并查集
- poj 1703 Find them, Catch them(并查集)
- poj 1703 Find them, Catch them //并查集
- POJ 1703 Find them, Catch them 并查集
- poj 1703 Find them, Catch them (并查集)
- poj 1703 Find them, Catch them(种类并查集)
- poj 1703 Find them, Catch them(种类并查集)
- poj 1703 -- Find them, Catch them(并查集)
- poj 1703 Find them, Catch them(并查集应用)
- POJ 1703 Find them, Catch them (并查集)
- poj 1703 - Find them, Catch them(并查集)
- poj 1703 Find them, Catch them(关系并查集)
- POJ 1703 Find them, Catch them 种类并查集
- POJ 1703 Find them, Catch them (关系并查集)
- POJ-1703 Find them, Catch them 经典并查集
- poj 1703 Find them,Catch them 并查集
- 按键精灵-如何不需要路径执行.exe文件
- C#的ConsoleKeyInfo
- spring管理bean的原理
- iOS开发 - Quartz2D绘图
- Android的三种网络通讯方式
- poj 1703 Find them, Catch them 并查集
- 详解Swift中的iOS设计模式
- Js apply方法详解
- Java基础数据类型转换
- LeetCode Find the Duplicate Number
- iOS开发见闻-第6期
- 系统自带的UIBarButtonSystemItem样式
- Hello, world!
- 面向对象程序设计上机练习二(函数模板)