题意:
每一个城市都有一颗龙珠,但是随着时间的推移,龙珠会被移到其他的城市,悟空想去收集这些龙珠,但是他需要你告知他,他要找的那颗龙珠的所在的城市,以及这个城市所拥有的龙珠数量,还有这颗龙珠迁移过多少次。
思路:
这是一道求并查集的普通的题目,理解了并查集的精髓并不难做出来
感想:
题目确实很与意思,相信作为七龙珠的粉丝,不难做出来,手动滑稽。
代码:
#define LOCAL
#include<cstring>#include<cstdio>
#define maxn 10005
int ball[maxn];
int city[maxn];
int cnt[maxn];
int n,q;
void init(){
for(int i=1 ; i<=n ;i++ ){
city[i]=i;
ball[i]=1;
cnt[i]=0; //转移次数
}
}
int fin(int x)
{
//int tem;
if(x==city[x])
return city[x];
int tem=city[x];
city[x]=fin(city[x]);
cnt[x]+=cnt[tem];
return city[x];
}
void Union(int x,int y)
{
x=fin(x);
y=fin(y);
if(x!=y){
city[x]=city[y];
ball[y]+=ball[x];
ball[x]=0; //球全部移动到y城市中
cnt[x]=1; //第一次移动
}
}
int main()
{
int t,a,b,tt=0;
char str[2];
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&q);
init();
printf("Case %d:\n",++tt);
while(q--){
scanf("%s",str);
if(str[0]=='T'){
scanf("%d%d",&a,&b);
Union(a,b);
}
else
{
scanf("%d",&a);
b=fin(a);
printf("%d %d %d\n",b,ball[b],cnt[a]);
}
}
}
return 0;
}