数据点1自测是对的为什么会WA
查看原帖
数据点1自测是对的为什么会WA
783233
1925153zty楼主2023/11/8 18:36
#include<bits/stdc++.h>
using namespace std;
const int N=3e4+5;
int read()
{
	int ans=0;
	char c=getchar();
	while(c<'0'||c>'9')
	c=getchar();
	while(c>='0'&&c<='9')
	ans=(ans<<1)+(ans<<3)+c-'0',c=getchar();
	return ans;
}
int fa[N],fa1[N];
int djg[N];
vector<int>z[N];
int faa;
int dx[N],n;
int cx(int x)
{
	if(fa[x]!=x)
	fa[x]=cx(fa[x]);
	return fa[x];
}
void hb(int x,int y)
{
	int u=cx(x);
	int v=cx(y);
	fa[u]=v;
	djg[u]=z[v].size();
	fa1[u]=v;
	z[v].push_back(dx[v]);
	dx[v]+=dx[u];
}
int ccx(int x,int y)
{
	if(fa1[x]==x)
	return y;
	return ccx(fa1[x],y+z[fa1[x]][djg[x]]);
}
int main()
{
	n=read();
	for(int i=1;i<=N-5;i++)
	dx[i]=1,fa[i]=i,fa1[i]=i;
	for(int i=1,u,v;i<=n;i++)
	{
		char c=getchar();
		u=read(),v=read();
		if(c=='M')
		hb(u,v);
		else
		{
			int x=cx(u);
			int y=cx(v);
			if(x!=y)
			{
				printf("-1\n");
				continue;
			}
			x=ccx(u,0);
			y=ccx(v,0);
			if(x<y)
			swap(x,y);
			if(x==y)
			printf("0\n");
			else
			printf("%d\n",x-y-1);
		}
	}
}
2023/11/8 18:36
加载中...