您的位置:首页 > 编程语言 > Go语言

HDU 3635 Dragon Balls 并查集水题 模拟

2013-12-06 14:42 375 查看
题意: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: