/*
一开始第a个球在第a个城市
操作T a b,把第a个球所在城市的所有球移到b所在的城市
操作Q a
要求输出
第a个球在哪个城市
第a个球所在的城市有几个球
第a个球移动次数
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#define move movee
#define MAXN 10005
using namespace std;
//第i个球所在城市,第i个球所在城市有几个球,第i个球移动次数
int F[MAXN],num[MAXN],move[MAXN];
int find(
int a){
if(F[a]==-
1)
return a;
int tmp=F[a];
//保存a的父亲
F[a]=find(F[a]);
//
move[a]+=
move[tmp];
return F[a];
}
//把a所在的集合移到b所在的集合
void bing(
int a,
int b){
int t1=
find(a);
int t2=
find(b);
if(t1!=
t2){
F[t1]=
t2;
move[t1]=
1;
num[t2]+=
num[t1];
}
}
int main(){
int T,n,q;
cin >>
T;
for(
int tt=
1;tt<=T;tt++
){
scanf("%d%d",&n,&
q);
for(
int i=
1;i<=n;i++
){
F[i]=-
1;
num[i]=
1;
move[i]=
0;
}
char op[
10];
int a,b;
printf("Case %d:\n",tt);
while(q--
){
scanf("%s",op);
if(op[
0]==
'T'){
scanf("%d%d",&a,&
b);
bing(a,b);
}
else {
scanf("%d",&
a);
int tmp=
find(a);
printf("%d %d %d\n",tmp,num[tmp],move[a]);
}
}
}
return 0;
}
转载于:https://www.cnblogs.com/zsben991126/p/9823351.html
相关资源:各显卡算力对照表!
转载请注明原文地址: https://win8.8miu.com/read-14869.html