题目
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN=31000;
int f[MAXN],min1;
int front[MAXN],behind[MAXN];
int find(int x)
{
if(f[x]==x) return x;
int fx=find(f[x]);
front[x]+=front[f[x]];
return f[x]=fx;
}
int main()
{
int t;
cin>>t;
for(int i=1;i<=30000;i++)
{
f[i]=i;
behind[i]=1;
}
for(int i=1;i<=t;i++)
{
int x,y;
char c1[10];
scanf("%s%d%d",c1,&x,&y);
if(c1[0]=='M')
{
int fx=find(x);
int fy=find(y);
front[fx]=behind[fy];
behind[fy]+=behind[fx];
f[fx]=fy;
}
else
{
int ans=-1;
int fx=find(x);
int fy=find(y);
if(fx==fy) ans=abs(front[x]-front[y])-1;
printf("%d\n",ans);
}
}
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步