hdu-3635 Dragon Balls(并查集)
来源:互联网 发布:ps4应用程序数据损坏 编辑:程序博客网 时间:2024/05/01 12:09
题意:
初始化每个城市都有一个龙珠
进行两步操作
T A B 就是把A所在的城市的龙珠数都运到城市B中
Q A 即要输出 A所在的城市 、 A所在城市的个数、A移动的次数
本题貌似不需要把原来A城市的龙珠数清0,每个根节点最多移动一次
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;const int M = 10005;int father[M];int rank[M];int move[M];int n,q;void init(){ for(int i = 0; i <= n; i++) { father[i] = i; rank[i] = 1; move[i] = 0; }}int find(int x)//并查集的精髓&&路径压缩----个人太水至今才明白{ if(x != father[x]) { int t = father[x]; father[x] = find(father[x]); move[x] += move[t]; } return father[x];}void Union(int a,int b){ int x = find(a); int y = find(b); if(x!=y) { father[x] = y; rank[y] += rank[x]; move[x] = 1; }}int main(){ char c; int t,x,y,Case = 1;; scanf("%d",&t); while(t--) { printf("Case %d:\n",Case++); scanf("%d%d",&n,&q); init(); for(int i = 0; i < q; i++) { getchar(); scanf("%c",&c); if(c == 'T') { scanf("%d%d",&x,&y); Union(x,y); } else { scanf("%d",&x); y = find(x); printf("%d %d %d\n",y,rank[y],move[x]); } } }}
0 0
- HDU 3635 Dragon Balls(并查集)
- hdu 3635 Dragon Balls(并查集)
- HDU 3635 Dragon Balls - 并查集
- hdu 3635 Dragon Balls 并查集
- HDU 3635 Dragon Balls(并查集)
- hdu-3635 Dragon Balls(并查集)
- HDU 3635 Dragon balls -并查集
- hdu Dragon Balls 3635【并查集】
- HDU 3635 Dragon Balls(并查集)
- hdu 3635 Dragon Balls(并查集)
- HDU-3635 Dragon Balls 并查集路径压缩
- HDU 3635 Dragon Balls(并查集:路径压缩)
- HDU 3635 Dragon Balls 带权并查集
- hdu 3635 Dragon Balls (带权并查集)
- hdu 3635 Dragon Balls ( 并查集路径压缩)
- hdu 3635 Dragon Balls 带权并查集
- HDU 3635-Dragon Balls(高级并查集)
- HDU 3635 Dragon Balls(带权并查集)
- Cocos2dx 3.0 又一种创建项目方式
- 选择排序本质:内层循环找出最小值并与数组左边的交换,外层循环进行数组从左到右排序,从小到大排序。
- 史莱克到家了私家车四度假村
- git与github在ubuntu下的使用
- Linux chmod授权命令说明
- hdu-3635 Dragon Balls(并查集)
- gdb安装
- ftp协议的简单介绍以及相关操作
- 解决linux ping: unknown host www.baidu.com
- 最大子数组问题(第4章:分治策略)
- android动画
- 常见Java面试题
- 十三个经典算法研究与总结、目录+索引
- hdu 1018 Big Number_Stirling数求N!的位数