手写读入优化RE
查看原帖
手写读入优化RE
943468
lizicheng3042楼主2023/6/8 08:30

虽然我之前的代码开氧气过了,但我还是尝试不开氧气,结果这个全是RE,有没有人能帮我看一下为什么,万分感谢!

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int num,s,fw;
char q;
struct node
{
	int fa,deep,la;
} f[30005];//用deep表示总长度
void chang(int x,int u,int y)
{
	f[x].deep+=u;
	if(f[x].la!=0) 
	{
		chang(f[x].la,u,y);
	}
	else
	{
//		printf("%d",x);
		f[x].la=y;
	} 
}
int find(int x,int t)
{
	if(t&&!f[x].la) f[x].la=t;
	return f[x].fa=f[x].fa==x?x:find(f[x].fa,x);
}
void dp(int x)
{
	if(f[x].la) dp(f[x].la);
}
int read()
{
	char a=getchar();
	int o=0;
	while(a!=' '&&a!='\n')
	{
		o*=10;
		o+=a-'0';
//		printf("o:%d a:%d ",o,a-'0');
		a=getchar();
	}
	return o;
}
int main()
{
	scanf("%d",&num);
	getchar();
	for(int a=1;a<=30000;a++)
	{
		f[a].fa=a;
		f[a].deep=1;
	 } 
	for(int a=1;a<=num;a++)
	{
		q=getchar();
		getchar();
		s=read();
		fw=read();
		if(q=='M')
		{
			int fc=find(s,0),fb=find(fw,0);
			if(fc!=fb)
			{
				f[fc].fa=fb;
				chang(fb,f[fc].deep,fc);
			}
		}
		else
		{
			int fc=find(s,0),fb=find(fw,0);
			if(fc!=fb) 
			{
				printf("-1\n");
			}
			else
			{
				printf("%d\n",abs(f[s].deep-f[fw].deep)-1);
			}
		}
	}
	return 0;
}
2023/6/8 08:30
加载中...