并查集:POJ No1703 Find them, Catch them
2017-05-17 18:20
393 查看
题目链接:http://poj.org/problem?id=1703
题意:两个坏蛋属于不同的组织,给出两个坏蛋判定是否一个组织。
题解:已知每次输入的两个帮派人员 x, y; 合并 (x, y + N), (x + N, y)。判定时,如果 (x, y) 属于同一个 根,就是同一个组织,(x, y+N) 属于同一个根,则说明是不同组织。不确定则无解。
题意:两个坏蛋属于不同的组织,给出两个坏蛋判定是否一个组织。
题解:已知每次输入的两个帮派人员 x, y; 合并 (x, y + N), (x + N, y)。判定时,如果 (x, y) 属于同一个 根,就是同一个组织,(x, y+N) 属于同一个根,则说明是不同组织。不确定则无解。
#include <iostream> using namespace std; const int maxn = 100000*2 + 20; int Rank[maxn], par[maxn]; void solve(); void init(const int& n) { for (int i = 0; i < n; i++) { par[i] = i; Rank[i] = 0; } } int find(const int& x) { if (par[x] == x) { return x; } else { return par[x] = find(par[x]); } } void unite(int x, int y) { x = find(x); y = find(y); if (x == y) return ; if (Rank[x] < Rank[y]) { par[x] = y; } else { par[y] = x; if (Rank[x] == Rank[y]) { ++Rank[x]; } } } bool same(int x , int y) { return find(x) == find(y); } void solve() { int T, N, M; int x, y; char cmd; scanf("%d", &T); while (T--) { scanf("%d%d", &N, &M); init(N * 2); getchar(); while (M--) { //忽略每次输入后的回车符 scanf("%c%d%d%*c", &cmd, &x, &y); //检查 if (cmd == 'A') { if (same(x, y)) { printf("In the same gang.\n"); } else if (same(x, y + N)) { printf("In different gangs.\n"); } else { printf("Not sure yet.\n"); } } else { //合并 (x, y+N) 或 (x+N, y) unite(x, y + N); unite(x + N, y); } } } } int main() { solve(); return 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 (数据结构-并查集)
- (用树结构支持并查集8.2.2)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【典型并查集:判断在不同的集合】