HDU——T 2818 Building Block
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU——T 2818 Building Block相关的知识,希望对你有一定的参考价值。
http://acm.hdu.edu.cn/showproblem.php?pid=2818
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5935 Accepted Submission(s): 1838
Problem Description
John are playing with blocks. There are N blocks (1 <= N <= 30000) numbered 1...N。Initially, there are N piles, and each pile contains one block. Then John do some operations P times (1 <= P <= 1000000). There are two kinds of operation:
M X Y : Put the whole pile containing block X up to the pile containing Y. If X and Y are in the same pile, just ignore this command.
C X : Count the number of blocks under block X
You are request to find out the output for each C operation.
M X Y : Put the whole pile containing block X up to the pile containing Y. If X and Y are in the same pile, just ignore this command.
C X : Count the number of blocks under block X
You are request to find out the output for each C operation.
Input
The first line contains integer P. Then P lines follow, each of which contain an operation describe above.
Output
Output the count for each C operations in one line.
Sample Input
6
M 1 6
C 1
M 2 4
M 2 6
C 3
C 4
Sample Output
1
0
2
Source
Recommend
多组数据、、貌似因为这个WA好多次了、、
1 #include <algorithm> 2 #include <cstring> 3 #include <cstdio> 4 5 using namespace std; 6 7 const int N(30005); 8 int fa[N],sum[N],beh[N]; 9 10 int find(int x) 11 { 12 if(fa[x]==x) return x; 13 int dad=fa[x]; 14 fa[x]=find(fa[x]); 15 beh[x]+=beh[dad]; 16 return fa[x]; 17 } 18 void combine(int x,int y) 19 { 20 x=find(x),y=find(y); 21 if(x==y) return ; 22 beh[x]=sum[y]; 23 sum[y]+=sum[x]; 24 fa[x]=y; 25 } 26 void init() 27 { 28 for(int i=0;i<N;i++) fa[i]=i,sum[i]=1,beh[i]=0; 29 } 30 31 int main() 32 { 33 for(int p,u,v;~scanf("%d",&p);) 34 { 35 init(); 36 for(char ch[2];p--;) 37 { 38 scanf("%s%d",ch,&u); 39 if(ch[0]==‘M‘) 40 { 41 scanf("%d",&v); 42 combine(u,v); 43 } 44 else find(u),printf("%d\n",beh[u]); 45 } 46 } 47 return 0; 48 }
以上是关于HDU——T 2818 Building Block的主要内容,如果未能解决你的问题,请参考以下文章
Building Block HDU - 2818 (并查集)
[HDOJ2818]Building Block(带权并查集,路径压缩)