Description
注:此题数据中 $N$ 的最大范围为 $10^5$。
6
M 1 6
C 1
M 2 4
M 2 6
C 3
C 4
1
0
2
Hint
by hansang:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int fa[N], ft[N], sum[N];
int findfa(int x){
if(fa[x]==x) return fa[x];
int f=fa[x];
int tx=findfa(fa[x]);
ft[x]+=ft[f];
sum[x]=sum[f];
return fa[x]=tx;
}
int main(){
int n; scanf("%d", &n);
for(int i=1; i<=n; i++) fa[i]=i, ft[i]=0, sum[i]=1;
for(int i=1; i<=n; i++){
char s[5]; scanf("%s", s);
if(s[0]=='M'){
int x, y; scanf("%d%d", &x, &y);
int tx=findfa(x), ty=findfa(y);
fa[ty]=tx; ft[ty]=sum[tx];
sum[tx]+=sum[ty];
}
else{
int x; scanf("%d", &x);
int tx=findfa(x);
printf("%d\n", sum[x]-ft[x]-1);
}
}
return 0;
}