左偏树可以用来维护可并堆(并查集加堆) 可以用并查集一样的路径压缩来优化复杂度 路径压缩后$fa$记录的就不为其原树中的父亲,而是用来表示堆与堆之间的关系 $dis:$表示该节点到它子树内最近的叶子节点的距离 节点的左儿子的距离不小于右儿子的距离,每次合并时,将一棵树合并到另一棵树的右子树,来保证复 ...
分类:
其他好文 时间:
2020-01-22 21:47:25
阅读次数:
68
左偏树。 并查集维护每个元素所在左偏树的根。每次取出堆顶除二再 回去。然后 两个点所在的堆。 2020.01.18 ...
分类:
其他好文 时间:
2020-01-19 19:22:37
阅读次数:
61
左偏树 定义一个节点的高度为到叶子节点的最短距离。 一棵左偏树需要满足几个性质: $1.$它是一个堆。 $2.$一个节点的左儿子的高度$\ge$右儿子的高度。 $3.$一个节点的高度$=$右儿子的高度$+1$。 由此可以得出一个节点数为$n$的左偏树的高度为$\log (n+1) 1$。 每个节点需 ...
分类:
其他好文 时间:
2020-01-08 00:30:40
阅读次数:
66
采用了jls的左偏树写法,非常好写... 额外用一个并查集维护集合关系即可,注意路径压缩。 ...
分类:
其他好文 时间:
2019-11-26 13:55:30
阅读次数:
55
左偏树是用来快速地合并堆的 正常的堆是一颗完全二叉树,我们用笨方法去合并它: 假设我们要将x和y这两个小根堆合并,我们判断一下如果x的堆顶大于y的堆顶,就交换一下x和y,然后继续合并x的某个子孩子和y。 堆被人们所推广的原因就是因为它的时间复杂度比较稳定,根本原因是堆是一颗完全二叉树 但显然的:这样 ...
分类:
其他好文 时间:
2019-11-01 20:12:50
阅读次数:
85
一道恶心至极的左偏树题 题意: 题解: 观察操作可以发现需要用两棵左偏树来维护 一棵维护全局最大值 一棵维护正常 操作一:普通左偏树正常连边 全局左偏树可以删去小的那个点 操作二:普通左偏树正常操作(删点-增值-merge)全局左偏树先删去x点连通块祖先 然后再加回连通块祖先 这样做比对全局左偏树也 ...
分类:
其他好文 时间:
2019-11-01 12:32:03
阅读次数:
77
因为也是昨天刚接触左偏树,从头理解,如有不慎之处,跪请指教。 左偏树: 什 么是(fzy说)左偏树啊? 前置知识: 左偏树中dist:表示到右叶点(就是一直往右下找,最后一个)的距离,特别的,无右节点的为0。 堆:左偏树是个堆。 关于左偏性质:可以帮助堆合并(研究深了我也不懂的,看代码理解) 对于任 ...
分类:
其他好文 时间:
2019-10-29 17:04:37
阅读次数:
107
```cpp include using namespace std; typedef long long ll; int solve(); int main() { ifdef Yinku freopen("Yinku.in","r",stdin); endif // Yinku solve(); ...
分类:
其他好文 时间:
2019-10-27 16:28:41
阅读次数:
105
难得不是左偏树,而是思维; 这道题在做得时候,有两个性质 1.如果a是一个不下降序列,那么b[i]==a[i]时取得最优解。 2.如果a是一个严格递减序列,则取a序列的中位数x,令b[1]=b[2]=b[3]=...=b[n]=x,即是最优解。 于是在做得时候,我们会分为几个区间,通过区间得合并去做 ...
分类:
其他好文 时间:
2019-10-26 13:34:50
阅读次数:
68
题意:有n只猴子,m个操作,每一个操作,会让这两堆猴子里的最大的两只打架,打完之后,自身权值减半,然后他们会成为朋友 也就是会属于同一棵树,细节:如果选出的猴子在同一堆,就输出-1,然后下一个操作,不用打架; ...
分类:
其他好文 时间:
2019-10-23 23:49:47
阅读次数:
97