和题解思路一样的,不太理解时间复杂度
#include<bits/stdc++.h>
using namespace std;
const int N=30005;
int T;
int fa[N],size[N],d[N];
int fd(int x)
{
if(x!=fa[x])
{
int rot=fd(fa[x]);
d[x]=d[x]+d[fa[x]];
fa[x]=rot;
}
return fa[x];
}
int main()
{
scanf("%d",&T);
for(int i=1;i<N;i++)fa[i]=i,size[i]=1,d[i]=0;
while(T--)
{
char op[3];
int x,y;
scanf("%s%d%d",op,&x,&y);
if(op[0]=='M')
{
int fx=fd(x),fy=fd(y);
fa[fx]=fy;
d[fx]=d[fx]+size[fy];
size[fy]=size[fy]+size[fx];
}
else
{
int fx=fd(x),fy=fd(y);
if(fx!=fy)
{
printf("-1\n");
}
else
{
if(x==y)printf("0\n");
else printf("%d\n",(int)abs(d[x]-d[y])-1);
}
}
}
return 0;
}