@[liruiduan2](/user/488310) 给你改成了这样:
```
#include<bits/stdc++.h>
using namespace std;
const int maxn=30001;
int fa[maxn],siz[maxn],len[maxn];
pair<int,int> find(int x){
if(fa[x]==x) return {x,0};
pair<int,int>temp=find(fa[x]);
siz[x] = siz[fa[x]];
return {fa[x]=temp.first,len[x]=temp.second+len[x]};
}
int gardpa(int x){
return find(x).first;
}
void join(int x,int y){
int fx=gardpa(x),fy=gardpa(y);
if (fx != fy){
fa[fx]=fy;
len[fx]=len[fy]+siz[fy];
siz[fy]+=siz[fx];
siz[fx]=siz[fy];
}
}
int search(int x,int y){
if(gardpa(x)==gardpa(y)){
return abs(len[x]-len[y])-1;
}
return -1;
}
int main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
for(int i=1;i<=30000;i++){
fa[i]=i;
siz[i]=1;
len[i]=0;
}
int n;
cin>>n;
for(int i=1;i<=n;i++){
char opt;
cin>>opt;
if(opt=='M'){
int x,y;
cin>>x>>y;
join(x,y);
}
else{
int x,y;
cin>>x>>y;
cout<<search(x,y)<<endl;
}
}
return 0;
}
```
by 看什么看 @ 2022-04-21 16:05:30
什么题?
by 外太空的肖 @ 2022-04-22 15:22:07
@[看什么看](/user/415838) 谢谢
by wisdua @ 2022-04-22 16:43:24