坑死了,这道题QAQ。。。说好的没有0,但是后台数据有0,WA了一下午= =
利用num[i]代表i下面有几个格子,Size[i]代表i做底的时候这一堆有几个箱子
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 30005;
int n,fa[maxn];
int num[maxn],Size[maxn];
char op[5];
int find_father(int u){
if(fa[u] == u)
return fa[u];
else{
int temp = fa[u];
fa[u] = find_father(fa[u]);
num[u] += num[temp];
return fa[u];
}
}
int main(){
while(scanf("%d",&n) != EOF){
for(int i = 0; i <= 30000; i++){
fa[i] = i;
Size[i] = 1;
num[i] = 0;
}
int x,y;
for(int i = 1; i <= n; i++){
scanf("%s",op);
if(op[0] == 'M'){
scanf("%d%d",&x,&y);
int fx = find_father(x),fy = find_father(y);
if(fx!= fy){
fa[fx] = fy;
num[fx] = Size[fy];
Size[fy]+= Size[fx];
Size[fx] = 0;
}
}
else{
scanf("%d",&x);
find_father(x);
printf("%d\n",num[x]);
}
}
}
return 0;
}