HDU 3635 Dragon Balls 并查集水题 模拟

2014-11-24 03:07:05 · 作者: · 浏览: 2

题意:n个龙珠,编号为1...n,分别在编号1....n的城市中。有两种操作,T A B,把A所在的城市的龙珠全部放到B所在的城市里;Q A,查询龙珠A所在的城市,以及城市现在有几个球,以及A被转移了几次。

很明显的并查集题目,刚开始没注意看是AB所在的城市,WA了一次...

代码:

/*
*  Author:      illuz 
  
   
*  Blog:        http://blog.csdn.net/hcbbt
*  File:        hdu3635.cpp
*  Create Date: 2013-12-06 14:24:29
*  Descripton:  union set 
*/

#include 
   
     #include 
    
      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; }