唔,试出了一个错误样例:
```
4
M 1 2
M 3 4
M 1 4
C 3 2
```
正在分析
by LYNiko @ 2021-06-24 12:25:43
```cpp
#include<bits/stdc++.h>
using namespace std;
const int N=30100;
int f[N],d[N],size[N];
int find(int a){
int j;
if(f[a]!=a){
j=find(f[a]);
d[a]+=d[f[a]];
f[a]=j;
}
return f[a];
}
int main() {
char of;
int n,i,a,b;
cin>>n;
for(i=1;i<=N;i++){
f[i]=i;size[i]=1;d[i]=0;
}
for(i=1;i<=n;i++){
cin>>of>>a>>b;
if(of=='M'){
a=find(a);b=find(b);
f[a]=b;d[a]+=size[b];size[b]+=size[a];
}
else
{
if(find(a)==find(b))
cout<<abs(d[a]-d[b])-1;
else
cout<<-1;
cout<<endl;
}
}
return 0;
}
```
应该好了,试试
感觉你没有读清楚题目 ~~或者题解~~
by LYNiko @ 2021-06-24 13:11:13
@[LYNiko](/user/384583) orz谢谢大佬
by pencil @ 2021-06-25 15:14:02