题目链接

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. 工资8000与80000的区别:这个能力值得你重视!
  2. string的find和find_first_of的区别
  3. mysql 1366 hy000_ERROR 1366 (HY000): Incorrect string value错误解决办法
  4. Spring注解开发-Bean注册
  5. mysql 占比函数_MySQL中你必须了解的函数
  6. 面试官:Spring为什么建议使用构造器来注入?
  7. 计算机的硬件性能指标(图片部分资源摘自王道考研资料)
  8. easyPOI基本用法详解
  9. java二维数组存储数据,从键盘上录入学生人数,考试科目数,以及每个学生每科分数,输出每个学生的最高分、最低分、总分、平均分
  10. Java GridBagLayout简单电子邮件发送界面的实现
  11. centos6.5 bash基础命令2
  12. RTT实时操作系统概念
  13. 分享19个高质量架构视频!吃透它,妥妥让你进大厂!
  14. Echarts数据可视化legend图例,开发全解+完美注释
  15. 17_购物车删除商品与清空购物车
  16. www.050604.pw ub.php,《UFIDA用友软件维护工具》050604版使用说明
  17. 如何把 json对象转换成 数组
  18. 三月月赛 1005 wuli通通和doge(细节处理)
  19. 为知笔记-艾宾浩斯遗忘曲线复习插件
  20. 卡西欧计算机设置参数,【卡西欧 fx-991CN X 中文函数计算器使用总结】参数|功能|显示|计算_摘要频道_什么值得买...

热门文章

  1. 顺丰快递电话查询比网上查询更提前更详细
  2. JAVA个人记账本代码,Java的家庭记账本程序(L)
  3. Web Spider 常见混淆EVAL、AA、JJ、JSFUCK
  4. yolov4评估自己的模型
  5. 杭电ACM 1000题
  6. 关于SVN 操作 提示文件已过时,请先update
  7. 九章算术 八:《方程》
  8. Desktop Goose for Mac抖音桌面宠物鸭
  9. dateadd函数转成oracle,oracle dateadd函数
  10. Towhee 每日模型周报