#include<stdio.h>
int prm[10010],num[10010],k;
char str[10];
int find(int n)
{
k++;//为了求龙珠的转移次数。
if(n==prm[n])
return n;
n=find(prm[n]);//没有路径压缩
return n;
}
int main()
{
int t,ii,i,f1,f2,ans,a,b,n,m;
scanf("%d",&t);
for(ii=1;ii<=t;ii++)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
prm[i]=i;
num[i]=1;//每个城中的龙珠数目。
}
printf("Case %d:\n",ii);
for(i=1;i<=m;i++)
{
scanf("%s",str);
if(str[0]=='T')
{
scanf("%d%d",&a,&b);
f1=find(a);
f2=find(b);
k=0;
if(f1!=f2)
{
prm[f1]=f2;
num[f2]+=num[f1];//如果不在同一个父节点,那么就把f1城中的龙珠给f2城
}
}
else if(str[0]=='Q')
{
scanf("%d",&a);
k=0;
ans=find(a);
printf("%d %d %d\n",ans,num[ans],k-1);
}
}
}
return 0;
}
hdu 3635
最新推荐文章于 2020-04-30 14:37:00 发布