题目链接

1930: 帽子戏法

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 88  Solved: 24
[Submit][Status][Web Board]

Description

小A家有很多很多顶帽子初始时帽子都是独立分开的,每顶帽子都有一个编号用于区分.小A会有以下操作之一:
1.将编号为y的帽子所在的帽子堆放在编号为x的帽子所在的帽子堆顶上,如果x,y在同一堆则不做任何动作.
2.小A会向你询问编号为x的帽子上方有多少只帽子.

Input

输入有多组数据:
第一行输入N,M分别为帽子数和操作数(1<=N<=40000,1<=M<=400000)
帽子的编号对应1,2,3...,N.
接下来有M行输入为 T x y 对应操作1. Q x 对应操作2.

Output

对于小A的询问输出位于编号为x的帽子上方的帽子数.

Sample Input

2 2

T 1 2

Q 1

Sample Output

1

HINT

Source

lcf

【解题思路】

num[i]:每个帽子上的帽子数

pos[i]:每个帽子堆的帽子数,i 是这堆帽子的最上面的帽子编号

需要注意的是在每一次合并的时候是把两个根节点合并,也就是说num数组只更新该点到根节点那条路径上的值,但是根节点的其他儿子节点并没有被更新,所以在查询的时候,需要再用并查集遍历一遍查询节点的路径上的num。

【代码】

#include<bits/stdc++.h>
using namespace std;
const int maxn=4e5+5;
int pre[maxn],num[maxn],pos[maxn];
//num表示每个帽子上的帽子数 pos表示每个帽子堆的帽子数
int findroot(int x)
{if(x!=pre[x]){int fx=pre[x];pre[x]=findroot(pre[x]);num[x]+=num[fx];}return pre[x];
}
int main()
{int n,m;while(~scanf("%d%d",&n,&m)){for(int i=0;i<=n;i++){pre[i]=i;num[i]=0;pos[i]=1;}while(m--){char ch=getchar();while(ch!='T'&&ch!='Q')ch=getchar();if(ch=='T'){int x,y;scanf("%d%d",&x,&y);int fx=findroot(x),fy=findroot(y);if(fx!=fy){pre[fx]=fy;num[fx]+=pos[fy];pos[fy]+=pos[fx];}}else{int x;scanf("%d",&x);findroot(x);printf("%d\n",num[x]);}}}return 0;
}

【ZCMU1930】帽子戏法(并查集)相关推荐

  1. 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...

  2. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  3. HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法

    tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...

  4. POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树

    一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...

  5. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

    二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...

  6. 【BZOJ1015】【JSOI2008】星球大战 并查集

    题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...

  7. 并查集 HDOJ 1232 畅通工程

    题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <c ...

  8. 1013 Battle Over Cities(并查集解法)

    关于背景的介绍见1013 Battle Over Cities(图的DFS解法) DFS就是不算特定结点后数连通子图的总数,再减一.我想着那么并查集就是数不算特定节点后,集合元素(根)的个数.但是我弄 ...

  9. 并查集专题练习:好朋友(未完待续)

    有空再把题目补上 输入样例1 4 2 1 4 2 3 样例输出1 2 输入样例2 7 5 1 2 2 3 3 1 1 4 5 6 输出样例2 3 解题思路: 1. 这题放在并查集的专题后面,有查找也有 ...

最新文章

  1. linux 终端 渐变色,iOS开发——UI篇文字渐变效果:图层中的mask属性
  2. python爬取图片-Python超简单的爬取网站中图片
  3. android游戏开发框架libgdx的使用(完)—杂谈Libgdx
  4. Linux-重装系统之静态ip配置
  5. JdbcTemplate和NamedParameterJdbcTemplate
  6. python使用rabbitMQ介绍五(话题模式)
  7. 表单设置默认值_你还不知道表单怎么设计吗?看这里!
  8. (转)基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍
  9. 在谈判中别无选择的时候,怎么办?
  10. ios-Text inset for UITextField
  11. ubuntu安装transmission下载BT
  12. PHP之 通过银行卡账号匹配银行名称
  13. 为什么要进行网站重构呢?
  14. 最美春三月,又到一年迎新时——烟台北大青鸟喜迎2019级新生入学报到
  15. MATLAB 线性动态范围调整
  16. 泛型---上界通配符和下界通配符
  17. Stream 大数据量List分批处理 java8
  18. 【SQL server 期末复习】
  19. 计算机网络路由器配置实验怎么做,计算机网络路由器配置实验
  20. 基于oracle的餐馆评价系统,美团大众点评优化评价系统 助力餐饮商家做好口碑营销...

热门文章

  1. 中国人寿在线笔试可以用计算机嘛,中国人寿集团校园招聘笔试经验
  2. java 电子时钟_java多线程编程制作电子时钟
  3. SecureCRT 命令行备注
  4. dd命令(dd命令制作镜像)
  5. computer_network CPT实验
  6. 位 字节 千字节 兆字节 (bit Byte KByte MByte GByte TByte)
  7. 现在有的年轻人想法有点畸形
  8. 利用put、move的请求方式对IIS6.0服务器上传执行asp木马
  9. firefox Chrome浏览器redux devTools调试工具
  10. win2003 apache php5.4 mysql_win2003下Apache2.4+PHP5.4+mysql5.6的搭建