标签:des style color os strong io for art
Time Limit: 2000MS | Memory Limit: 30000K | |
Total Submissions: 18858 | Accepted: 6547 | |
Case Time Limit: 1000MS |
Description
Input
Output
Sample Input
6 M 1 6 C 1 M 2 4 M 2 6 C 3 C 4
Sample Output
1 0 2
题意:n个方块(n<=30000),p组操作(p<=100000),操作有两种,M a b 将含有a的堆放在包含b的堆上,还有一种是 C a统计a下面有多少个方块
思路:带权并查集,一堆中最顶上的方块作为父节点,用dist[X] 统计X到父亲节点的距离,rank[fa[X]]表示团的大小,两者相减即为答案
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <string> #include <algorithm> #include <queue> using namespace std; const int maxn = 30000+10; int fa[maxn]; int rank[maxn]; int dist[maxn]; void init(){ for(int i = 0; i < maxn; i++){ fa[i] = i; rank[i] = 1; dist[i] = 0; } } int find(int x){ if(x != fa[x]){ int t = fa[x]; fa[x] = find(fa[x]); dist[x] += dist[t]; } return fa[x]; } int main(){ int n; while(~scanf("%d",&n)){ init(); char op; while(n--){ cin >> op; int a,b; if(op=='M'){ scanf("%d%d",&a,&b); int faA = find(a); int faB = find(b); if(faA != faB){ fa[faB] = faA; dist[faB] = rank[faA]; rank[faA] += rank[faB]; } }else{ scanf("%d",&a); int x = find(a); printf("%d\n",rank[x]-dist[a]-1); } } } return 0; }
POJ1988-Cube Stacking(带权并查集),布布扣,bubuko.com
标签:des style color os strong io for art
原文地址:http://blog.csdn.net/mowayao/article/details/38311599