【题目分析】
并查集。
【代码】
#include <cstdio>
#include <cmath>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int f[50001],w[50001],s[50001];
char ss[11];
inline int gf(int k)
{
if (f[k]==k) return k;
int t=f[k];
f[k]=gf(f[k]);
w[k]+=w[t];
return f[k];
}
inline void un(int x,int y)
{
x=gf(x);y=gf(y);
f[x]=y;
w[x]+=s[y];
s[y]+=s[x];
s[x]=0;
}
int main()
{
int n;
scanf("%d",&n);
for (int i=1;i<=30000;++i) f[i]=i,w[i]=0,s[i]=1;
while (scanf("%s",ss)!=EOF)
{
// printf("%s\n",s);
if (ss[0]=='M'){
int x,y;
scanf("%d%d",&x,&y);
un(x,y);
}
else{
int x;
scanf("%d",&x);
gf(x);
printf("%d\n",w[x]);
}
}
}