虽然我之前的代码开氧气过了,但我还是尝试不开氧气,结果这个全是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;
}