首页 > 其他分享 >左偏树 学习笔记

左偏树 学习笔记

时间:2023-01-05 22:35:15浏览次数:58  
标签:dist log int 笔记 学习 return 节点 左偏

左偏树是一类拥有下列操作的数据结构:

  1. 插入一个数 \(O(log n)\)

  2. 求最小值 \(O(1)\)

  3. 删除一个节点 \(O(log n)\)

  4. 合并两棵树 \(O(log n)\)

左偏树本身具有堆的性质,又称为可并堆。

以维护最小值为例:

概念:

  • 权值\(val\)

  • 距离\(dis\):到最近的根节点的距离 (\(\leqslant log n\))

\(left\rightarrow dist\rightarrow right\rightarrow dist\)

\(f[k]\):距离为\(k\)的子树,至少包含多少个点。

  • \(f[k]\geqslant 2^k-1\)
    证明:\(k=1,n=k-1\)
    \(n=k, f(n)\geqslant 2^{k-1}-1+2^{k-1}-1+1=2^k-1\)
    故必须要有\(f[k]\geqslant 2^k-1\)

\(merge(a,b)\):合并子树\(a,b\),并返回合并后的根节点。
比较\(a,b\)的根节点的大小,如果\(a\)的根节点小于\(b\)的根节点,则把\(b\)插到\(a\)的右子树,然后检查\(a\)是否符合左偏性质,如果不满足就把左右子树交换。
这个操作存\(root\)时需要路径压缩。
为什么可以用并查集? 只有合并而没有分裂。

于是下面的操作就很简单了。

插入操作:建立只包含一个点的左偏树,将其与原树合并。
最小值:根节点
删除操作:合并左右子树。

code

bool cmp(int x, int y)
{
    if (v[x] != v[y]) return v[x] < v[y];
    return x < y;
}

int find(int x)
{
    if (p[x] != x) p[x] = find(p[x]);
    return p[x];
}

int merge(int x, int y)
{
    if (!x || !y) return x + y;
    if (cmp(y, x)) swap(x, y);
    r[x] = merge(r[x], y);
    if (dist[r[x]] > dist[l[x]]) swap(l[x], r[x]);
    dist[x] = dist[r[x]] + 1;
    return x;
}

习题选做:
P4359 【CQOI2016】 伪光滑数
P3261 【JLOI2015】 城池攻占

标签:dist,log,int,笔记,学习,return,节点,左偏
From: https://www.cnblogs.com/sunruize/p/17029007.html

相关文章

  • Java开发学习(五十)----MyBatisPlus快速开发之代码生成器解析
    1、代码生成器原理分析造句:我们可以往空白内容进行填词造句,比如:在比如:观察我们之前写的代码,会发现其中也会有很多重复内容,比如:那我们就想,如果我想做一个Book模块......
  • 关于C语言库函数qsort的学习
    #include<stdio.h>#include<stdlib.h>#include<string.h>structStu{charname[20];intage;};//voidqsort(void*base,//size_tnum,//size_twidth,//int(*cmp......
  • 大厂必考深度学习算法面试题总结
    目录目录一,滤波器与卷积核二,卷积层和池化输出大小计算三,深度学习框架的张量形状格式四,Pytorch、Keras的池化层函数理解五,Pytorch和Keras的卷积层函数理解六,sof......
  • 机器学习的基本概念
    1什么是machinelearning?lookingforfunctionfunction的类别Regression:输出的是一个量(连续量)Classification:输出的是某个类别(离散量)StructuredLearning:创造一些有......
  • Markdown学习
    Markdown学习标题三级标题四级标题 字体Hello,World!Hello,World!Hello,World!Hello,World!Hello,World! 引用选择狂神说java,走向人生巅峰 分割线......
  • Linux学习笔记(五)
    (1)关闭Ubuntu大版本更新提示aptpurge update-notifier(2)ssh代理及反向代理ssh-Lssh-R(3)mysql密码登录mysql-uroot-pmysqldump-uroot-p-all-databases>1.sq......
  • Xilinx GT学习
    一、GT的概念Xilinx FPGA的GT意思是GigabyteTransceiver。通常称呼为Serdes、高速收发器。GT在xilinx不同系列有着不同的产品,从7系列到UltraScale系列分别有GTP、GTX、G......
  • 学习笔记——书城项目第五阶段之购物项加号、购物项减号
    2023-01-05一、设置购物项加号 (1)找到“+”号的位置,在“cart.html”中的第61行中,添加单击事件,通过“异步”操作来设置<spanclass="count"@click="addCount">+</span>......
  • dfs学习笔记
    题目链接可以通过参考一道例题来加深对dfs的认知和学习题意描述按照字典序输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重......
  • 【学习笔记】多对一和一对多
    多对一和一对多概念:以老师和学生为例多对一:多个学生对应一个老师,关键词【关联】多个学生关联一个老师一对多:一个老师对应多个学生,关键词【集合】 设计环境创建老......