题意:n个龙珠,编号为1...n,分别在编号1....n的城市中。有两种操作,T A B,把A所在的城市的龙珠全部放到B所在的城市里;Q A,查询龙珠A所在的城市,以及城市现在有几个球,以及A被转移了几次。
很明显的并查集题目,刚开始没注意看是AB所在的城市,WA了一次...
代码:
/*
* Author: illuz <iilluzen[at]gmail.com>
* Blog: http://blog.csdn.net/hcbbt
* File: hdu3635.cpp
* Create Date: 2013-12-06 14:24:29
* Descripton: union set
*/
#include <cstdio>
#include <cstring>
const int MAXN = 1e4 + 10;
int cnt[MAXN], pos[MAXN];
int n, q, t, a, b;
char op[3];
int main() {
int cas = 1;
scanf("%d", &t);
while (t--) {
scanf("%d%d", &n, &q);
printf("Case %d:\n", cas++);
// init
for (int i = 0; i <= n; i++)
cnt[i] = 1, pos[i] = i;
// quest
while (q--) {
scanf("%s", op);
if (op[0] == 'T') {
scanf("%d%d", &a, &b);
// a -> b;
while (a != pos[a])
a = pos[a];
while (b != pos[b])
b = pos[b];
cnt[b] += cnt[a];
cnt[a] = 0;
pos[a] = b;
}
else {
scanf("%d", &a);
b = 0;
while (a != pos[a])
a = pos[a], b++;
printf("%d %d %d\n", a, cnt[a], b);
}
}
}
return 0;
}