Description

有n个点,第i个点标号为i,有两种操作:
0 x y 表示把x所在堆和y所在堆合并。
1 x 表示询问x所在堆的最小权。

Input

第一行两个整数n,m,表示有n个点m个操作。

接下来m行操作如题。

Output

对于每个询问操作输出其答案。

Sample Input

5 3
1 4
0 2 4
1 4

Sample Output

4
2

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的更多相关文章

  1. poj 3253 初涉二叉堆 模板题

    这道题很久以前就做过了 当时是百度学习了优先队列 后来发现其实还有个用sort的办法 就是默认sort排序后 a[i]+=a[i-1] 然后sort(a+i,a+i+n) (大概可以这样...答案忘了 ...

  2. HDU 1512 Monkey King(左偏树模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1512 题意: 有n只猴子,每只猴子一开始有个力量值,并且互相不认识,现有每次有两只猴子要决斗,如果认识,就不打了 ...

  3. poj1511/zoj2008 Invitation Cards(最短路模板题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Invitation Cards Time Limit: 5 Seconds    ...

  4. 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 ...

  5. 51Nod 博弈模板题

    连刷3道博弈模板题,算是稍微学习了以下三个经典博弈了.推荐一个博客. 第一道模板:Bash博弈——同余理论 1066 Bash游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度 ...

  6. HDU 4347 - The Closest M Points - [KDTree模板题]

    本文参考: https://www.cnblogs.com/GerynOhenz/p/8727415.html kuangbin的ACM模板(新) 题目链接:http://acm.hdu.edu.cn ...

  7. dp优化-四边形不等式(模板题:合并石子)

    学习博客:https://blog.csdn.net/noiau/article/details/72514812 看了好久,这里整理一下证明 方程形式:dp(i,j)=min(dp(i,k)+dp( ...

  8. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

  9. HDU 2222 AC自动机模板题

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2222 AC自动机模板题 我现在对AC自动机的理解还一般,就贴一下我参考学习的两篇博客的链接: http: ...

随机推荐

  1. Abstract Data Type

  2. springMVC的执行请求过程

    springMVC的运行流程: 1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器 3.处理器映 ...

  3. Acwing897 最长公共子序列

    题目大意:求两个字符串的最长公共子序列的长度. 分析:这是一个典型的dp入门题,LCS. 代码: #include<bits/stdc++.h> using namespace std; ...

  4. EASYUI TREE得到当前节点数据的GETDATA方法

    function show() { var node = $('#tt-c71').tree('getSelected'); var data = $('#tt-c71').tree('getData ...

  5. springcloud gateway 项目打包部署运行

    新建一个springboot项目然后做了一个小demo跳转到baidu pom <?xml version="1.0" encoding="UTF-8"? ...

  6. docker学习笔记-06:自定义DockerFile生成镜像

    一.自定义centos的DockerFile 1.从阿里源里拉的centos镜像新建的容器实例中,没有vim编辑器和ifconfig命令,所以自定义centos的DockerFile,创建自己想要的镜 ...

  7. struts2--验证器

    1.输入验证: --struts2提供了一些基于Xwork Validation Framework的内建验证程序,使用这些验证程序不需要变编程,只要在一个XML文件里进行声明,声明的内容如下: &g ...

  8. k-近邻算法python代码实现(非常全)

    1.k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用.它是一种经典简单的分类算法,当然也可以用来解决回归问题.2 ...

  9. P1079 延迟的回文数

    P1079 延迟的回文数 转跳点:

  10. bugku love

    emmm....控制台运行一下 接着查一下是否有壳 显示是没有壳的,接着查看一下结构 也没有什么发现,上ida看一下吧,顺便说一句每个人的解题思路都不一样.面对一开始都不清楚的结构我会选择交叉引用这样 ...