d[N] 数组记录离父节点的距离,size数组记录父节点的大小
#include <bits/stdc++.h>
using namespace std;
const int N=31000+10;
int fa[N],n,t,i,j,d[N],size[N];//size就是记录个数
int get(int x)
{
if(x==fa[x] ) return x;
int root=get(fa[x]);
d[x]+=d[fa[x]];
return fa[x]=root;
}
void merge(int x,int y)
{
x=get(x),y=get(y);
fa[x]=y;
d[x]=size[y];
size[y]+=size[x];
}
int main()
{
scanf("%d\n",&t);
for(i=1;i<=30000;i++)
fa[i]=i,size[i]=1;
while(t--)
{
char ch=getchar();
scanf("%d %d\n",&i,&j);
if (ch=='M')
merge(i,j);
else
{
if (get(i)==get(j))
cout<<abs(d[i]-d[j])-1;
else
cout<<"-1";
cout<<endl;
}
}
return 0;
}
posted on
浙公网安备 33010602011771号