[HDU1512/ZOJ2334]Monkey King-左偏树-可合并堆
Problem Monkey King
Solution
本题是裸的左偏树,一个模板就可以过了。对于每个操作对节点先删除/2再合并。
注意本题在HDU上评测特别坑,是多组数据,而且经常出现MLE的情况。很可能是其中初始化的问题。
斜堆可以更快。具体请查询IOI2015黄源河集训队论文。
AC Code
#include "iostream"
#include "cstdio"
using namespace std;
struct LeftistTree{
int dist,n,lc,rc,fa;
}a[];
int find(int x){
while(a[x].fa!=x)x=a[x].fa;
return x;
}
int n,m;
int x,y,ans,fx,fy,u,v,dx,dy;
int merge(int x,int y){
if(x==)return y;
if(y==)return x;
if(a[x].n<a[y].n)swap(x,y);
a[x].rc=merge(a[x].rc,y);
a[a[x].rc].fa=x;
if(a[a[x].lc].dist<a[a[x].rc].dist)swap(a[x].lc,a[x].rc);
if(a[x].rc!=)a[x].dist=a[a[x].rc].dist+;
else a[x].dist=;
return x;
}
int delt(int x){
int ret=merge(a[x].lc,a[x].rc);
a[a[x].lc].fa=ret;
a[a[x].rc].fa=ret;
a[x].lc=a[x].rc=a[x].dist=;
a[x].fa=x;
return ret;
}
int main(){
while(~scanf("%d",&n)){
a[].lc=;a[].rc=;a[].fa=;
for(int i=;i<=n;i++)scanf("%d",&a[i].n),a[i].fa=i,a[i].dist=,a[i].lc=,a[i].rc=;
scanf("%d",&m);
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
fx=find(x),fy=find(y);
if(fx==fy)printf("-1\n");else{
dx=delt(fx),dy=delt(fy);
a[fx].n/=;
a[fy].n/=;
dx=merge(dx,fx);
dy=merge(dy,fy);
ans=merge(dx,dy);
printf("%d\n",a[ans].n);
}
}
}
}
[HDU1512/ZOJ2334]Monkey King-左偏树-可合并堆的更多相关文章
- HDU1512 ZOJ2334 Monkey King 左偏树
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - ZOJ2334 题目传送门 - HDU1512 题意概括 在一个森林里住着N(N<=10000)只猴子. ...
- ZOJ2334 Monkey King 左偏树
ZOJ2334 用左偏树实现优先队列最大的好处就是两个队列合并可以在Logn时间内完成 用来维护优先队列森林非常好用. 左偏树代码的核心也是两棵树的合并! 代码有些细节需要注意. #include&l ...
- hdu 1512 Monkey King 左偏树
题目链接:HDU - 1512 Once in a forest, there lived N aggressive monkeys. At the beginning, they each does ...
- zoj 2334 Monkey King/左偏树+并查集
原题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1389 大致题意:N只相互不认识的猴子(每只猴子有一个战斗力值) 两只 ...
- HDU 1512 Monkey King (左偏树+并查集)
题意:在一个森林里住着N(N<=10000)只猴子.在一开始,他们是互不认识的.但是随着时间的推移,猴子们少不了争斗,但那只会发生在互不认识 (认识具有传递性)的两只猴子之间.争斗时,两只猴子都 ...
- hdu 1512 Monkey King —— 左偏树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1512 很简单的左偏树: 但突然对 rt 的关系感到混乱,改了半天才弄对: 注意是多组数据! #includ ...
- hdu1512 Monkey King(左偏树 + 并查集)
Once in a forest, there lived N aggressive monkeys. At the beginning, they each does things in its o ...
- LuoguP1456 Monkey King (左偏树)
struct LeftTree{ int l,r,val,dis; }t[N]; int fa[N]; inline int Find(int x){ return x == fa[x] ? x : ...
- HDU 1512 Monkey King ——左偏树
[题目分析] 也是堆+并查集. 比起BZOJ 1455 来说,只是合并的方式麻烦了一点. WA了一天才看到是多组数据. 盲人OI (- ̄▽ ̄)- Best OI. 代码自带大常数,比启发式合并都慢 [ ...
- Monkey King(左偏树 可并堆)
我们知道如果要我们给一个序列排序,按照某种大小顺序关系,我们很容易想到优先队列,的确很方便,但是优先队列也有解决不了的问题,当题目要求你把两个优先队列合并的时候,这就实现不了了 优先队列只有插入 删除 ...
随机推荐
- 解决R语言临时文件目录的问题(tempdir、tempfile)
最近在调用SparkR的时候,当用copy_to函数将R中的数据框导入到Spark时,会在默认的tempdir()目录下(这里默认目录即为/tmp)产生巨大的临时文件, 严重影响R脚本的运行,最终一番 ...
- VR全景,零售业冬天里的一把火——全景智慧城市
对今天的中国来说,寻找经济转型的突破口,寻找经济权力的新霸主,零售业应该当仁不让. 零售业正在经历一场脱胎换骨的改造.一方面零售额达到前所未有的水平,另一方面,传统零售商也面临诸多挑战,其中之一,便是 ...
- 特朗普退出《巴黎协定》:python词云图舆情分析
1 前言 2017年6月1日,美国特朗普总统正式宣布美国退出<巴黎协定>.宣布退出<巴黎协定>后,特朗普似乎成了“全球公敌”. 特斯拉总裁马斯克宣布退出总统顾问团队 迪士尼董事 ...
- PHP实现Collection数据集类及其原理
本文目录 : Collection源码 讲解与例子 ArrayAccess的使用 JsonSerializable的使用 Countable的使用 IteratorAggregate.ArrayIte ...
- Canvas学习系列一:初识canvas
最近你开始在学习canvas,打算把学习canvas的整个学习过程当中的一些笔记与总结记录下来,如有什么不足之处还请大神们多多指出. 1. 认识canvas Canvas元素的出现,可以说开启的Web ...
- 每天一个JS 小demo之留言板。主要知识点:DOM方法的理解和运用
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...
- 手机wap网站建设的方法和技巧
随着互联网技术的不断进步,越来越多的运营商对于手机wap网站的建设有了更多的投入,手机wap网站的建设和开发要根据网站的特点和经营范围来进行设计和建设,这样才可以提升手机wap网站建设的效果.现在智能 ...
- C#与Java对比学习
Eclipse开发环境与VS开发环境的调试对比 数据类型.集合类.栈与队列.迭达.可变参数.枚举 类型判断.类与接口继承.代码规范与编码习惯.常量定义
- javascript事件委托机制详解
以个人前端工作面试经历来看,javascript事件委托是问的最多的一类题目之一,熟悉事件委托能够了解你对于javascript的掌握程度. 面试官可能问一下问题,现在有5个li待办事件,需要实现当点 ...
- 并发编程(一):从头到脚解读synchronized
一.目录 1.多线程启动方式 2.synchronized的基本用法 3.深度解析synchronized 4.同步方法与非同步方法是否能同时调用? 5.同步锁是否可重入(可重入锁)? 6.异常是否会 ...