<span style="font-size:14px;">#include<stdio.h>
const int Max=30010;
int cube[Max];
int sum[Max];
int under[Max];
int find(int a){
if(cube[a]==a)
return a;
int t=find(cube[a]);
under[a]+=under[cube[a]];
cube[a]=t;
return cube[a];
}
void Merge(int a,int b){
int fa=find(a);
int fb=find(b);
if(fa==fb)
return;
cube[fa]=fb;
under[fa]=sum[fb];
sum[fb]+=sum[fa];
}
int main(){
int p;
while(scanf("%d",&p)==1){
for(int i=0;i<Max;i++){
cube[i]=i;
sum[i]=1;
under[i]=0;
}
if((p<1)||(p>100000))
break;
for(int i=0;i<p;i++){
char k[20];
scanf("%s",&k);
if(k[0]=='M'){
int h,s;
scanf("%d%d",&h,&s);
Merge((h-1),(s-1));
}
else{
int h;
scanf("%d",&h);
find(h-1);
printf("%d\n",under[h-1]);
}
}
}
}
</span>
poj 1988--E - Cube Stacking
最新推荐文章于 2022-03-03 13:43:07 发布
