HDU 3635 Dragon Balls(超级经典的带权并查集!!!新手入门)
Dragon Balls
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7926 Accepted Submission(s): 2937

His country has N cities and there are exactly N dragon balls in the world. At first, for the ith dragon ball, the sacred dragon will puts it in the ith city. Through long years, some cities' dragon ball(s) would be transported to other cities. To save physical strength WuKong plans to take Flying Nimbus Cloud, a magical flying cloud to gather dragon balls.
Every time WuKong will collect the information of one dragon ball, he will ask you the information of that ball. You must tell him which city the ball is located and how many dragon balls are there in that city, you also need to tell him how many times the ball has been transported so far.
For each case, the first line contains two integers: N and Q (2 < N <= 10000 , 2 < Q <= 10000).
Each of the following Q lines contains either a fact or a question as the follow format:
T A B : All the dragon balls which are in the same city with A have been transported to the city the Bth ball in. You can assume that the two cities are different.
Q A : WuKong want to know X (the id of the city Ath ball is in), Y (the count of balls in Xth city) and Z (the tranporting times of the Ath ball). (1 <= A, B <= N)
3 3
T 1 2
T 3 2
Q 2
3 4
T 1 2
Q 1
T 1 3
Q 1
2 3 0
Case 2:
2 2 1
3 3 2
给你n个物品,从1到n编号
现在对n有m个操作
T A B 把A所在集合的物品全部移到B所在的集合(移动的物品包括A)
Q X 问你X所在集合的编号,x所在集合的结点数量,和x移到的次数
比如样例1:1移到2,然后3移到2,因为是移到2,所以集合编号就是2,注意理解
此时Q 1,那么1所在集合编号就是2,因为是移到2去的,1所在集合的结点数量是3
那么此时1的移到此时是1
- #include<queue>
- #include<set>
- #include<cstdio>
- #include <iostream>
- #include<algorithm>
- #include<cstring>
- #include<cmath>
- #include<map>
- #include<string>
- #include<string.h>
- #include<memory>
- using namespace std;
- #define max_v 10005
- #define INF 9999999
- int pa[max_v];
- int num[max_v];//num[i] i所在集合内含有结点个数
- int mov[max_v];//mov[i] i移动的次数
- int n,m;
- void init()
- {
- for(int i=; i<=n; i++)
- {
- pa[i]=i;
- num[i]=;
- mov[i]=;
- }
- }
- int find_set(int x)
- {
- if(pa[x]!=x)
- {
- int t=pa[x];
- pa[x]=find_set(pa[x]);
- mov[x]+=mov[t];//孩子结点的移动次数会与其父亲结点移动次数相关
- }
- return pa[x];
- }
- void union_set(int x,int y)
- {
- int fx=find_set(x);
- int fy=find_set(y);
- if(fx!=fy)
- {
- pa[fx]=fy;
- num[fy]+=num[fx];//合并之后大集合的结点数等于原来两个小集合结点数目之和
- mov[fx]++;//x的根结点 移动次数++ x的移动次数在find_set函数里面更新
- }
- }
- int main()
- {
- int t;
- int x,y;
- char str[];
- int c=;
- scanf("%d",&t);
- while(t--)
- {
- scanf("%d %d",&n,&m);
- init();
- printf("Case %d:\n",c++);
- for(int i=; i<m; i++)
- {
- scanf("%s",str);
- if(str[]=='T')
- {
- scanf("%d %d",&x,&y);
- union_set(x,y);
- }
- else if(str[]=='Q')
- {
- scanf("%d",&x);
- int k=find_set(x);
- printf("%d %d %d\n",k,num[k],mov[x]);
- }
- }
- }
- return ;
- }
- /*
- 题目意思:
- 给你n个物品,从1到n编号
- 现在对n有m个操作
- T A B 把A所在集合的物品全部移到B所在的集合(移动的物品包括A)
- Q X 问你X所在集合的编号,x所在集合的结点数量,和x移到的次数
- 注意:
- 比如样例1:1移到2,然后3移到2,因为是移到2,所以集合编号就是2,注意理解
- 此时Q 1,那么1所在集合编号就是2,因为是移到2去的,1所在集合的结点数量是3
- 那么此时1的移到此时是1
- 注意理解移动次数数组
- 具体参考代码
- */
HDU 3635 Dragon Balls(超级经典的带权并查集!!!新手入门)的更多相关文章
- HDU Virtual Friends(超级经典的带权并查集)
Virtual Friends Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 3047 带权并查集 入门题
Zjnu Stadium 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3047 Problem Description In 12th Zhejian ...
- HDU 1829 A Bug's Life 【带权并查集/补集法/向量法】
Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes ...
- hdu 3038 How Many Answers Are Wrong ( 带 权 并 查 集 )
How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- HDU 3038 How Many Answers Are Wrong(带权并查集)
太坑人了啊,读入数据a,b,s的时候,我刚开始s用的%lld,给我WA. 实在找不到错误啊,后来不知怎么地突然有个想法,改成%I64d,竟然AC了 思路:我建立一个sum数组,设i的父亲为fa,sum ...
- HDU 3038 - How Many Answers Are Wrong - [经典带权并查集]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
- 洛谷 1196 [NOI2002]银河英雄传说【模板】带权并查集
[题解] 经典的带权并查集题目. 设cnt[i]表示i前面的点的数量,siz[i]表示第i个点(这个点是代表元)所处的联通块的大小:合并的时候更新siz.旧的代表元的cnt,路径压缩的时候维护cnt即 ...
- 并查集例题02.带权并查集(poj1182)
Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A.现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底 ...
- hdu 5441 Travel 离线带权并查集
Travel Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5441 De ...
随机推荐
- python中类变量和实例变量
1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Generally speaking, instance variables are for data u ...
- git杂记-撤销操作
覆盖上一次的提交或重新更新提交说明 $ git commit --amend -m '我再次提交啦,上一次的提交已经不见啦.这是一个危险的操作哦.哈哈,其实并不危险,也是可以数据恢复的啦' 取消已暂存 ...
- gulp & webpack整合
为什么需要前端工程化? 前端工程化的意义在于让前端这个行业由野蛮时代进化为正规军时代,近年来很多相关的工具和概念诞生.好奇心日报在进行前端工程化的过程中,主要的挑战在于解决如下问题:✦ 如何管理多个项 ...
- Java设计模式—组合模式
组合模式是一种常见的设计模式(但我感觉有点复杂)也叫合成模式,有时又叫做部分-整体模式,主要是用来描述部分与整体的关系. 个人理解:组合模式就是将部分组装成整体. 定义如下: 将对象组合成树形结构以表 ...
- 怎样修复grub开机引导(grub rescue)
很多时候,特别是在linux调整分区后,开机重启时会出现 error : unknow filesystem grub rescue> 的字样,系 ...
- 一步一步pwn路由器之路由器环境修复&&rop技术分析
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 拿到路由器的固件后,第一时间肯定是去运行目标程序,一般是web服务 ...
- AndroidStudio中logcat不输出信息
2017年11月27日,记住这个日子.今天第一次感觉到被批评了,由于自己技术知识储备不足导致今天的外出工作等于浪费时间.正式因为这个logcat不输出信息的问题,前几回不输出信息了我就从新启动了开发工 ...
- moveTaskToback退后台的用法及作用
1 方法:public boolean moveTaskToBack(boolean nonRoot) activity里有这个方法,参数说明如下: nonRoot=false→ 仅当activity ...
- mac ASP.NET5
不写1行代码,在Mac上体验ASP.NET 5的最简单方法 昨天微软发布了ASP.NET 5 beta2(详见ASP.NET 5 Beta2 发布),对ASP.NET 5的好奇心又被激发了. 今天 ...
- Linux内核 网络数据接收流程图
各层主要函数以及位置功能说明: 1)sock_read:初始化msghdr{}的结构类型变量msg,并且将需要接收的数据存放的地址传给msg.msg_iov->iov_base. ...