改了一下,还是错的555
```cpp
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int s=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))s=s*10+(ch-'0'),ch=getchar();
return s;
}
inline int readc(){
char ch=getchar();
while(!isalpha(ch))ch=getchar();
return ch;
}
const int max_n=30000+5;
int par[max_n],rank[max_n],dis[max_n],m;
int find(int x){
if(x==par[x])return x;
dis[x]+=dis[par[x]];
return par[x]=find(par[x]);
}
void merge(int x,int y){
x=find(x),y=find(y);
if(x==y)return;
par[x]=y,dis[x]+=rank[y];
rank[y]+=rank[x],rank[x]=0;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
for(int i=1;i<=max_n;i++)par[i]=i,rank[i]=1;
m=read();
while(m--){
char ch=readc();
int x=read(),y=read();
if(ch=='M')merge(x,y);
else {
if(find(x)!=find(y))cout<<"-1"<<"\n";
else cout<<abs(dis[x]-dis[y])-1<<"\n";
}
}
return 0;
}
```
by skiy_gyx @ 2019-07-27 09:20:24
@[skiy_gyx](/space/show?uid=48625)
把
```cpp
int find(int x){
if(x==par[x])return x;
dis[x]+=dis[par[x]];
return par[x]=find(par[x]);
}
```
改为
```cpp
int find(int x){
if(x==par[x])return x;
int to=find(par[x]);
dis[x]+=dis[par[x]];
return par[x]=to;
}
```
by Smile_Cindy @ 2019-07-27 09:48:42
@[skiy_gyx](/space/show?uid=48625) 真谢谢您,改了就AC了
by skiy_gyx @ 2019-07-27 09:51:54
@[Alpha](/space/show?uid=87058)
by skiy_gyx @ 2019-07-27 09:52:09
@[Smile_Cindy](/user/87058) 本蒟蒻也是这么错的qwq 请问为什么原来的写法不行呢?
by fervency @ 2022-03-23 08:13:55