本文共 1111 字,大约阅读时间需要 3 分钟。
题意:有N个城市, 每一个城市都有一个龙珠(编号与城市的编号相同),有两个操作
T A ,B 将标号为A龙珠所在城市的所有的龙珠移动到B龙珠所在城市中!
思路:并查集 (压缩路径的时候将龙珠移动的次数进行更新)
int f[M];//表示龙珠 i 所在的城市标号
int Tcnt[M];//记录每个龙珠移动的次数
int Scnt[M];//记录每个城市中龙珠总个数
Tcnt[x]+=Tcnt[f[x]];//每一个龙珠移动的次数+=其依附的父亲龙珠移动的次数
void Union(int a, int b){
Scnt[fb]+=Scnt[fa];//将fa城市的龙珠全部移动到fb城市中!
for(int cc=1; cc<=t; ++cc){
printf("Case %d:\n", cc);
memset(Tcnt, 0, sizeof(int)*(n+1));
printf("%d %d %d\n", ff, Scnt[ff], Tcnt[a]);
本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3902119.html,如需转载请自行联系原作者