- 银河英雄传说
- 2016-08-26 13:13:21 @
#include<cstdio>
int f[30010][2];
long n;
int findfather(int a)
{
if(a!=f[a][0])
f[a][0]=findfather(f[a][0]);
return f[a][0];
}
int findson(int a)
{
if(a!=f[a][1])
f[a][1]=findson(f[a][1]);
return f[a][1];
}
void doing(int x,int y)
{ f[y][0]=findson(x);
if(f[x][1]==x)
f[x][1]=y;
}
void answer(int x,int y)
{
int total=0,a;
bool w=false;
if(findfather(x)!=findfather(y))
printf("-1\n");
else{
while(f[a][1]!=y && f[a][1]!=x){
if(w==true)
total++;
if(a==y || a==x)
w=true;
a=f[a][1];
}
printf("%d\n",total);
}
}
int main()
{
int a,b;
char c;
scanf("%ld",&n);
for(long i=1;i<=n;i++)
{f[i][0]=f[i][1]=i;}
for(long i=1;i<=n;i++)
{
scanf("%c %d %d",&c,&a,&b);
if(c=='M')
doing(a,b);
else
answer(a,b);
}
return 0;
}
0 条评论
目前还没有评论...