@[_Ethan123_](/user/517086)
```cpp
#include<iostream>
using namespace std;
int f[100001],dis[100001],s[100001];
int find(int x){
if(f[x]==x)
return x;
dis[x]+=dis[f[x]];
return f[x]=find(f[x]);
}
void un(int u,int v){
u=find(u);
v=find(v);
if(u==v)return;
f[u]=v;
dis[u]+=s[v];
s[v]+=s[u];
s[u]=0;//这里s[u]应该清零(个人理解)
}
int main(){
int T;
cin>>T;
for(int i=1;i<=30000;++i){
f[i]=i;
s[i]=1;
}
char c;
int x,y;
while(T--){
cin>>c>>x>>y;
if(c=='M')un(x,y);
else{
int u=find(x),v=find(y);
if(u!=v)cout<<-1<<endl;
else cout<<abs(dis[x]-dis[y])-1<<endl;
}
}
}
```
by william_zy @ 2022-05-02 22:50:26