检查一下你是不是输出了fx到fy的距离。
错误示范:
#include<bits/stdc++.h>
using namespace std;
int fa[30005],dis[30005],sum[30005],_,x,y;
int find(int x){
if(fa[x]==x) return x;
int fx=find(fa[x]);
dis[x]+=dis[fa[x]];
return fa[x]=fx;
}
int main(){
cin>>_;
for(int i=1; i<=30000; i++){
fa[i]=i;
dis[i]=0;
sum[i]=1;
}
while(_--){
char op;
cin>>op>>x>>y;
int fx=find(x),fy=find(y);
if(op=='M'){
if(fx==fy) continue;
dis[fx]+=sum[fy];
fa[fx]=fy;
sum[fy]+=sum[fx];
sum[fx]=0;
}
else{
if(fx!=fy) cout<<"-1\n";
else cout<<abs(dis[fx]-dis[fy])-1<<'\n';
}
}
return 0;
}