#include <stdio.h>
#include <stdlib.h>
#define MAXN 10005
//移动的次数其实就是它自己本身移动的次数加上其所有父亲移动的次数
int father[MAXN],num[MAXN],move[MAXN];
void Init(int n)
{
int i;
for (i=1;i<=n;i++)
{
father[i]=i;
num[i]=1;
move[i]=0;
}
}
int find(int x)
{
int temp;
if(father[x]==x)
return x;
temp=father[x];
father[x]=find(father[x]);
move[x]+=move[temp];
return father[x];
}
void Union(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy)
{
father[fx]=fy;
num[fy]+=num[fx];
move[fx]=1;
}
}
int main()
{
int test,n,m,x,y,ans,cases=0;
char ch;
scanf("%d",&test);
while(test--)
{
cases++;
scanf("%d %d",&n,&m);
Init(n);
printf("Case %d:\n",cases);
while(m--)
{
getchar();
scanf("%c",&ch);
if(ch=='T')
{
scanf("%d %d",&x,&y);
Union(x,y);
}
else
{
scanf("%d",&x);
ans=find(x);
printf("%d %d %d\n",ans,num[ans],move[x]);
}
}
}
return 0;
}
hdu3635 Dragon Balls
最新推荐文章于 2021-06-04 00:18:15 发布