*求诸位神犇指教!!!*

#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 条评论

目前还没有评论...

信息

ID
1443
难度
7
分类
数据结构 | 并查集 点击显示
标签
递交数
3513
已通过
721
通过率
21%
被复制
7
上传者