UnknownWA求调
查看原帖
UnknownWA求调
726870
Rainber楼主2023/12/4 18:44
#include<cstdio>
int bcj[30000];
int d[30000];
int tail[30000];
int abs(int a)
{
	return (a>0?a:-a);
}
int find(int a)
{
	if(bcj[a]==a)
	{
		return a;
	}
	else
	{
		int of=bcj[a];
		bcj[a]=find(of);
		tail[a]=tail[bcj[a]];
		d[a]+=d[of];
		return find(of);
	}
}

void merge(int a,int b,int w)
{
	int fa=find(a),fb=find(b);
	if(fa!=fb)
	{
		bcj[fa]=fb;
		d[fa]=d[b]-d[a]+w;
		tail[fb]=tail[fa];
	}
}
int dis(int a,int b)
{
	if(find(a)==find(b))
	{
		return abs(d[a]-d[b]);
	}
	return 0;
}
int main()
{
	int n,i;
	char sr[2];
	int a,b;
	for(i=0;i<30000;++i)
	{
		tail[i]=bcj[i]=i;
	}
	scanf("%d",&n);
	for(i=0;i<n;++i)
	{
		scanf("%s%d%d",sr,&a,&b);
		a--;
		b--;
		if(sr[0]=='M')
		{
			merge(find(a),tail[b],1);
		}
		else
		{
			printf("%d\n",dis(a,b)-1);
		}
		for(int i=0;i<4;++i)
		{
			printf("%d ",d[i]);
		}
		printf("\n");
		for(int i=0;i<4;++i)
		{
			printf("%d ",bcj[i]);
		}
		printf("\n");
		for(int i=0;i<4;++i)
		{
			printf("%d ",tail[i]);
		}
		printf("\n");
	}
	return 0;
}

码风还比较清爽,求调

2023/12/4 18:44
加载中...