可并堆模板题-mergeable heap
Description
有n个点,第i个点标号为i,有两种操作:
0 x y 表示把x所在堆和y所在堆合并。
1 x 表示询问x所在堆的最小权。
Input
第一行两个整数n,m,表示有n个点m个操作。
接下来m行操作如题。
Output
对于每个询问操作输出其答案。
Sample Input
Sample Output
HINT
n,m<=100000
Solution
可并堆模板题,看到这道题第一眼裸并查集可做,但为了训练可并堆,此题我们采取可并堆来解决。(虽然还是得用并查集)
用并查集维护每个元素所在堆的根节点,合并即可。注意每次合并的应该是读入元素的根节点,而不是其本身。否则会导致每个点的根节点十分混乱,RE。同时合并的同时应该判断合并的两点是否属于同一个堆,如果是不用再合并,如果不是,则继续合并。
Code
#include <stdio.h>
#include <algorithm>
using namespace std;
int l[],r[],dis[],f[];
int merge(int x,int y)
{
if(!x) return y;
if(!y) return x;
if(x>y)
swap(x,y);
r[x]=merge(r[x],y);
f[r[x]]=x;
if(dis[r[x]]>dis[l[x]])
swap(l[x],r[x]);
dis[x]=dis[r[x]]+;
return x;
}
int find(int x)
{
while(f[x])
x=f[x];
return x;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
dis[]=-;
for(int i=;i<=m;i++)
{
int a;
scanf("%d",&a);
if(a==)
{
int x,y;
scanf("%d%d",&x,&y);
int t1=find(x);
int t2=find(y);
if(t1!=t2)
merge(t1,t2);
}
if(a==)
{
int x;
scanf("%d",&x);
int t1=find(x);
printf("%d\n",t1);
}
}
}
可并堆模板题-mergeable heap的更多相关文章
- poj 3253 初涉二叉堆 模板题
这道题很久以前就做过了 当时是百度学习了优先队列 后来发现其实还有个用sort的办法 就是默认sort排序后 a[i]+=a[i-1] 然后sort(a+i,a+i+n) (大概可以这样...答案忘了 ...
- HDU 1512 Monkey King(左偏树模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=1512 题意: 有n只猴子,每只猴子一开始有个力量值,并且互相不认识,现有每次有两只猴子要决斗,如果认识,就不打了 ...
- poj1511/zoj2008 Invitation Cards(最短路模板题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Invitation Cards Time Limit: 5 Seconds ...
- HDU 4006 The kth great number 优先队列、平衡树模板题(SBT)
The kth great number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Oth ...
- 51Nod 博弈模板题
连刷3道博弈模板题,算是稍微学习了以下三个经典博弈了.推荐一个博客. 第一道模板:Bash博弈——同余理论 1066 Bash游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度 ...
- HDU 4347 - The Closest M Points - [KDTree模板题]
本文参考: https://www.cnblogs.com/GerynOhenz/p/8727415.html kuangbin的ACM模板(新) 题目链接:http://acm.hdu.edu.cn ...
- dp优化-四边形不等式(模板题:合并石子)
学习博客:https://blog.csdn.net/noiau/article/details/72514812 看了好久,这里整理一下证明 方程形式:dp(i,j)=min(dp(i,k)+dp( ...
- [AHOI 2009] 维护序列(线段树模板题)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
- HDU 2222 AC自动机模板题
题目: http://acm.hdu.edu.cn/showproblem.php?pid=2222 AC自动机模板题 我现在对AC自动机的理解还一般,就贴一下我参考学习的两篇博客的链接: http: ...
随机推荐
- UISearchBar设置背景色
1.关于UISearchBar的背景颜色,竟然要如下设置才正常: [documentSearchView setBackgroundImage:[UIImage new]]; documentSear ...
- OPC DA通讯 KEP6.4 DCOM 配置脚本
在OPC DA通讯测试时总是避免不了要配置DCOM,我习惯是在虚拟机中装这些通讯测试软件,每次安装都需要再次手动配置,感觉很是麻烦 因此,查找资料,了解到可以用dcomperm这个软件来在命令行下进行 ...
- k-近邻算法python代码实现(非常全)
1.k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用.它是一种经典简单的分类算法,当然也可以用来解决回归问题.2 ...
- linux中df和du查看磁盘大小不一致解决方法
挂了一块50G到/data目录下# df -h Filesystem Size Used Avail Use% Mounted on /dev/xvdb1 50G 46G 1.2G 98% /dat ...
- app1----攻防世界
啥也不说把题目下载下来,在模拟器里运行一下 输入正确的key就是flag 继续下一步分析,可以使用Androidkiller分析,我喜欢使用jeb这里我就使用jeb进行分析 找到MainActivit ...
- redis cluster 添加/删除节点操作
RedisCluster 添加/删除节点 添加节点新配置两个测试节点8008和9009 [root@--- ~]# /usr/local/redis-/bin/redis-server /u02/re ...
- docker学习笔记-04:docker容器数据卷
一.容器数据卷是什么 1.为了保存docker容器运行时产生的数据,做数据的持久化,我们需要用到容器数据卷.因为如果不通过docker commit 生成新的镜像,那么当容器被删除时,数据自然就没有了 ...
- java理解抽象类 2.19
// Telphone.java public abstract class Telphone{ public abstract void call(); public abstract void m ...
- POJ 3090 欧拉函数
求一个平面内可见的点,其实就是坐标互质即可,很容易看出来或者证明 所以求对应的欧拉函数即可 #include <iostream> #include <cstdio> #inc ...
- hadoop安装文档
一.准备 该准备工作在三台机器上都需要进行,首先使用 vmvare 创建 1 个虚拟机,这台虚拟机是 master,一会需要把 master 克隆出两台 slave 点确定然后开启此虚拟机 然后添加/ ...