标签:
#include <stdio.h>
#include <stdlib.h>
int pre[100005];
int num[100005],mov[100005];
int a,b;
int find(int x)
{
if(x==pre[x]) return x;
int t=pre[x];
pre[x] = find(pre[x]);
mov[x] +=mov[t];
return pre[x];
}
void join(int x,int y) //判断x y是否连通,
//如果已经连通,就不用管了 //如果不连通,就把它们所在的连通分支合并起,
{
int fx=find(x),fy=find(y);
//printf("!%d %d\n",fx,fy);
if(fx!=fy)
{
pre[fx]=fy;
num[fy]+=num[fx];
mov[fx]=1;
}
}
int sets(int n)
{
int i;
for(i=1;i<=n;i++)
{
pre[i]=i;
num[i]=1;
mov[i]=0;
}
}
int main()
{
int i,t,j,k,n,m,a,b,ans,x;
char p;
scanf("%d",&t);
for(k=1;k<=t;k++)
{
printf("Case %d:\n",k);
scanf("%d %d",&n,&m);
sets(n);
for(i=0;i<m;i++)
{
scanf(" %c",&p);
if(p==‘T‘)
{
scanf("%d %d",&a,&b);
join(a,b);
}
else
{
scanf("%d",&a);
ans=find(a);
printf("%d %d %d\n",ans,num[ans],mov[a]);
}
}
}
return 0;
}

2 3 3 T 1 2 T 3 2 Q 2 3 4 T 1 2 Q 1 T 1 3 Q 1
Case 1: 2 3 0 Case 2: 2 2 1 3 3 2
标签:
原文地址:http://www.cnblogs.com/Qiao994255978/p/4680496.html