hdu 3635 Dragon Balls(并查集)
题意:
N个城市,每个城市有一个龙珠。
两个操作:
1.T A B:A城市的所有龙珠转移到B城市。
2.Q A:输出第A颗龙珠所在的城市,这个城市里所有的龙珠个数,第A颗龙珠总共到目前为止被转移了多少次。
思路:
前两个好求,第三个求转移的次数只要把它到根的路径上的值加起来就行了
看代码
代码:
int N,Q; int fa[10005], ballNum[10005], moveTime[10005]; int findFa(int x){ if(fa[x]==x) return fa[x]; int t=findFa(fa[x]); moveTime[x]+=moveTime[fa[x]]; ballNum[x]=ballNum[t]; return fa[x]=t; } int main(){ int T; cin>>T; rep(t,1,T){ scanf("%d%d",&N,&Q); rep(i,1,N){ fa[i]=i; ballNum[i]=1; moveTime[i]=0; } printf("Case %d:\n",t); while(Q--){ char ope[5]; int A,B; scanf("%s",ope); if(ope[0]=='T'){ scanf("%d%d",&A,&B); int fA=findFa(A); int fB=findFa(B); if(fA!=fB){ ballNum[fB]+=ballNum[fA]; moveTime[fA]++; fa[fA]=fB; } }else{ scanf("%d",&A); findFa(A); printf("%d %d %d\n",fa[A],ballNum[A],moveTime[A]); } } } return 0; }