以下是我的神奇代码。
#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]);
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);
fa[fx]=fy;
len[fx]=siz[fy];
siz[fy]+=len[fx];
}
int search(int x,int y){
if(gardpa(x)==gardpa(y)){
return abs(siz[x]-siz[y]);
}
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;
}
样例过了,一提交,满屏红。 哪位dalao能帮帮我。