左偏树是一种比较常用的可并堆。那什么是可并堆呢?可并堆,顾名思义,是一种除了支持堆的基本操作外,还支持合并等操作的数据结构,如斜堆,左偏树,二项堆,配对堆,斐波那契堆等。 左偏树写起来不难,跑起来也不错 是一个老少咸宜的数据结构 讲解之前先放一张左偏树的概念图: 相关定义 外节点:只有一个儿子或没有 ...
分类:
其他好文 时间:
2019-08-14 14:56:02
阅读次数:
94
因为路径压缩的原因 pop出根的时候记得要将根的父亲连向合并后新树的根 #include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define repp(i,a,b) for( ...
分类:
其他好文 时间:
2019-08-13 13:22:16
阅读次数:
77
题意 有n只猴子,一开始互不认识,每次有两只猴子要打架,他们会找来自己认识的最厉害的猴子来帮他们打(然而他们就看戏),打完后打架的猴子(不是看戏的)武力值会减少一半(下取整),并且他们也互相认识了,在这时询问他们认识的猴子中最厉害的猴子的武力值,打架的在之前认识输出-1。 n,m<=100000 题 ...
分类:
其他好文 时间:
2019-08-03 01:12:09
阅读次数:
105
可并堆有一种黑科技是用线段树合并实现,还能可持久化,时间复杂度nlogn。 这里介绍左偏树。 d值表示走右边到叶子的距离。满足d[r] <= d[l] 写法上用rt维护根节点,类似线段树。 放一个模板。 namespace lt { int ls[N], rs[N], siz[N], d[N], r ...
分类:
其他好文 时间:
2019-02-22 10:20:50
阅读次数:
169
解题关键:左偏树模板 1、路径压缩版本 2、非路径压缩版本,保留树结构 ...
分类:
其他好文 时间:
2019-02-18 01:11:06
阅读次数:
164
"题面" 参考:《左偏树的特点及运用——黄河源》 我们将这个数列划为很多个互不相交的区间,每一段区间内的 $b$ 是相等的,即 $b[l[i]]=b[l[i]+1]=...=b[r[i]]=w[i]?$, $l[i],r[i]?$ 为区间 $i?$ 的左右端点 先假设题目时要求b不下降的(比较好讨论 ...
分类:
其他好文 时间:
2019-02-15 22:35:03
阅读次数:
241
左偏树的树高是 $log(n)$ 级别的,所以在查询祖先的时候是不可以直接顺着左偏树上的父亲查询的. 另开一个并查集,在并查集上进行路径压缩的查询即可. Code: ...
分类:
其他好文 时间:
2019-02-06 17:04:22
阅读次数:
154
题目链接: "戳我" 就是尽可能地选取排名小的,加起来就可以了。然后我们考虑利用一个大根堆,一个一个合并,如果超过派遣的钱,我们就把费用最大的那个忍者丢出队列。 左偏树,作为一个十分优秀的可并堆,我们这道题利用的就是这个数据结构。 左偏树不会? "戳我" 这里有一张来自HolseLee dalao的 ...
"P1552 [APIO2012]派遣" 遍历每个点,维护可并堆。 遍历结束后,将所有儿子的可并堆并起来。并计算答案。 cpp include include include include include using std::vector; using std::max; using std:: ...
题目描述 题解: 明显的$k$短路问题,这里提供两种方法。 1.$A$*算法 $A$*可以解决一般的$k$短路问题,但是并不如可持久化可并堆优秀。 $A$*的本质是$f+g$,而估价函数可以用终止节点到终点的最短路表示。 所以先反向建图$dij$,然后小根堆跑$A$*即可。 优化一下,总代价/起点终 ...
分类:
其他好文 时间:
2019-01-20 16:29:05
阅读次数:
202