并查集0分求改
查看原帖
并查集0分求改
759152
yinbe楼主2023/10/2 11:11
#include<iostream>
using namespace std;
int T,fa[30005],fa_front[30005],fa_cnt[30005];
int find_fa(int i)
{
	if(fa[i]==i)
	{
		return i;
	}
	fa_front[i]+=fa_front[fa[i]];
	fa[i]=find_fa(fa[i]);
	return fa[i];
}
int main()
{
	for(int i=1;i<=30000;i++)
	{
		fa[i]=i;
		fa_cnt[i]=1;
	}
	scanf("%d",&T);
	while(T--)
	{
		char c;
		int i,j;
		cin>>c;
		scanf("%d%d",&i,&j);
		if(c=='C')
		{
			if(find_fa(i)!=find_fa(j))
			{
				printf("-1\n");
			}
			else
			{
				printf("%d\n",abs(fa_cnt[i]-fa_cnt[j])-1);
			}
		}
		if(c=='M')
		{
			fa[find_fa(i)]=find_fa(j);
			fa_front[find_fa(i)]=fa_cnt[find_fa(j)];
			fa_cnt[find_fa(j)]+=fa_cnt[find_fa(i)];
		}
	}
	return 0;
}
2023/10/2 11:11
加载中...