0 pts
查看原帖
0 pts
169594
Heart_Of_Iron_4楼主2023/4/16 19:25

rt

#include<bits/stdc++.h>
using namespace std;
#define int long long 
int f[514191],num[514191],n=30000,t,t1,t2;
char t114;
int find(int k)
{
	if(f[k]!=k)
	{
		int t3=find(f[k]);
		if(t3!=f[k])num[k]=num[k]+num[t3]+1;
		f[k]=t3;
	}
	return f[k];
}
void merge(int k1,int k2)
{
	f[find(k1)]=f[find(k2)];
}
signed main()
{
	scanf("%lld",&t);
	for(int i=1;i<=n;++i)f[i]=i;
	for(int i=1;i<=t;++i)
	{
		cin>>t114>>t1>>t2;
		if(t114=='M')merge(t1,t2);
		else
		{
			find(t2);find(t1);
			printf("%lld\n",(find(t1)==find(t2))?abs(num[t2]-num[t1]):(long long)(-1));
		}
		//for(int i=1;i<=10;++i)printf("%lld ",num[i]);
	//	puts("");
	}
	return 0;
}
2023/4/16 19:25
加载中...