首页 > 其他分享 >trick:动态维护虚树大小

trick:动态维护虚树大小

时间:2024-05-08 20:25:56浏览次数:26  
标签:rs dep trick dfn ls lca 动态 虚树

对 dfn 序开数据结构(如线段树),每个结点 \(p\) 维护对应 dfn 序区间内所有存在的点所构成的虚树大小 \(sz_p\),需要维护区间内所有存在的点中 dfn 序最大点 \(rv_p\) 和最小点 \(lv_p\)、区间内所有存在点的 LCA \(lca_p\).

考虑合并左右儿子 \(ls, rs\),按两棵虚树是否相交分讨,先考虑相交的情况,容易证明两棵虚树的交一定形如一条链,进一步的,即为 \(rv_{ls}\) 到 \(lca_{ls}\) 的链 与 \(lv_{rs}\) 到 \(lca_{rs}\) 的链的交,而链交是好求的,于是合并后的虚树大小即为 \(sz_{ls}+sz_{rs} + dep_{lca_{ls}} + dep_{lca_{rs}} - dep_{\operatorname{LCA}(rv_{ls}, lv_{rs})} - dep_{\operatorname{LCA}(lca_{ls}, lca_{rs})} - 1\).

发现不交的情况下式子是一样的,其实可以考虑在左右儿子的虚树中都加入从 \(lca\) 到根的链,这样就只有相交的情况了,且交是一条一端为根的链,求出虚树并后减去新的 \(lca\) 到根的链长即可.

可以使用 dfs 序 + st 求 LCA.

注:如果不为一条链,即交有两个叶子,这意味着被合并的两个点集都分别在这两个叶子对应的子树内有点,两个叶子对应子树的 dfn 区间不交,于是被合并的两个点集的 dfn 区间出现相交,即导出矛盾.

标签:rs,dep,trick,dfn,ls,lca,动态,虚树
From: https://www.cnblogs.com/0922-Blog/p/18180786/trick-to-maintain-the-size-of-virtual-tree

相关文章

  • 动态规划
    A:"1+1+1+1+1+1+1+1=?"A:"上面等式的值是多少"B:计算"8"A:在上面等式的左边写上"1+"呢?A:"此时等式的值为多少"B:很快得出答案"9"A:"你怎么这么快就知道答案了"A:"只要在8的基础上加1就行了"A:"所以你不用重新计算,因为你记住了第一个等......
  • C++基础-如何引入第三方静态库、动态库或自定义库 摘自 https://blog.csdn.net/u01310
    C++无论是内置库还是第三方库,都需要自己手动进行查找、配置、引入等工作。本文即是帮助完成C++项目对于库、框架如何完成依赖引入达成可调用的目的,重点讲述开发工具VisualStudio中的操作静态库(.lib)静态库引入适用用于大部分无开源的第三方库,开发者不需要关心库的具体实现如何,......
  • FastAdmin动态增加FieldList问题
    最终效果出现的问题1.FastAdmin1.5版本功能正常,移植到1.2版本导致异常。解决办法:更新require-form.js为1.5版本2.js动态渲染FieldList,点击新增阶梯后会导致上面已有的FieldList点击追加会出现多行数据。如图解决办法:新增完毕只渲染新增的FieldList......
  • linux动态修改磁盘大小步骤
    #卸载/da1或者确保没有进程正在使用它umount/da1#或者如果你不能卸载,确保上面的数据不会被修改#文件系统检查e2fsck-f/dev/VolGroup00/LogVol03#缩减文件系统resize2fs/dev/VolGroup00/LogVol031024G#假设你希望/da1保留1100G空间#缩减逻辑卷......
  • 洛谷题单指南-动态规划2-P1833 樱花
    原题链接:https://www.luogu.com.cn/problem/P1833题意解读:在有限的时间内,看n株樱花树,第i株樱花树可以看pi次,看每株樱花树耗费时间ti,看每株樱花树一次美学值ci,求最多能看到多少美学值。解题思路:本题实质是一个混合背包问题(pi>0是多重背包,pi=0是完全背包):背包容量:总时间,可以根据......
  • 深度学习中的动态Shape
    一、概念静态Shape:指在网络执行阶段Tensor的shape没有发生变化;动态Shape:指在网络执行阶段Tensor的shape发生变化。二、动态shape引起的原因输入shape不固定;网络执行过程中有引发shape变化的API;控制流不同分支引入shape上的变化。三、规避策略可以在输入数据上加pad......
  • 动态判断两个时间的时间间隔--时分秒
    <!--div--><view>{{countRunTime(fromTime,toTime,'hh时mm分')"}}</view><!--script-->countRunTime(date1,date2,pattern){//date1开始时间,date2结束时间,pattern显示格式(这里只需要显示经时时分秒格式)letstartTime=newDate(date1......
  • 动态设置时间显示:hh:mm、星期、或具体日期
    封装共同方法exportfunctionformatMsgTime(time){//time传入的是时间戳,且时间戳长度为10位consttodayZero=newDate().setHours(0,0,0,0);constyearZero=newDate(newDate().getFullYear(),0,1,0,0,0,0).getTime();consttarget=newD......
  • [JUCE库]关于JUCE如何生成动态链接库 juce-7.0.1-windows
    前言当我们在使用JUCE库的时候,可能会需要使用到静态链接的方式,还好的一点是JUCE本身提供了CMake编译,也提供了单独的sln编译。本文章仅针对juce-7.0.1-windows,由于不同版本之间差异较大,可能不能通用,但主要的不同点都在修改源码那个环节。编译流程找到源码中提供的编译方案修......
  • 洛谷题单指南-动态规划2-P1854 花店橱窗布置
    原题链接:https://www.luogu.com.cn/problem/P1854题意解读:F束花依次放入V个花瓶,每个花瓶最多一朵,且花的顺序在花瓶中递增,计算最大的美学值,并且输出每朵花具体放置方案。解题思路:首先想到的的DFS法,对于每一朵花,枚举所有的摆放方案,累加美学值,并记录放置位置,完成一种方案就记录最......