首页 > 其他分享 >树上合并 目前的总结

树上合并 目前的总结

时间:2024-08-19 22:49:05浏览次数:7  
标签:总结 set log 线段 合并 儿子 树上 DP

启发式合并(set)

元素少的 set 中的元素一一插入元素多的 set 中。

时间两只 \(\log\)。空间最坏为 \(n\) 这个级别(结点数)(这是在默认一个结点最多增加一个元素的情况下)。

log 数据结构时间也是两只 \(\log\)。

dsu on tree

好像[也叫“树上启发式合并”](??)。

[一般](?)是重链剖分一样划分轻重儿子。(好像也有与长链剖分类似的写法。但我不会也不懂这有什么优势。下面今天写的内容都是指重链剖分。)

实际上是靠保留重儿子子树的影响,轻儿子的子树只是临时用(当然如果上面有重儿子也会被保留)。

这样保证了时间和空间,时间复杂度的分析类似于重链剖分。而且 可以用桶这种占用空间较多的东西来维护,虽然不用桶用 set 应该也可以。用桶时间是一只 log 的,用 set 时间是两只 log。基本的空间是 \(n\) 这个级别的,如果用桶则空间还要加上桶的。

下面是一些实现细节:

  • 先走轻儿子可以保证重儿子的子树不会影响到轻儿子的子树。

  • dsu on tree 主要是添加,删除本质上是“追溯”。于是遇到不能快速回退(没法快速整上一个逆)的情况,可以记一下之前的某个变量,之后还原回去(如:[CF600E](?)),而不用真正一步步还原。如果一步步还原应该可以用栈来实现(如果要还原桶空间可能很大),虽然我应该还没有遇到这种题。一步步还原本质上应该是用[“可追溯化”](???)数据结构来维护。如果直接跳回之前的状态(不是一步步回去)可以用主席树这种可持久化数据结构来维护。

线段树合并

Trie 合并、[李超线段树合并](我还不会,不确定属不属于)大概也属于线段树合并。

线段树相比平衡树的优势在于它结构固定。这使得它可以快速地合并(指的是可以有交集的合并),而平衡树没法快速地合并(指的是有交集的)。

树状数组好像正常来看不太好合并,因为它一般不是一个[“纯函数式”](?)的结构。但是好像它本来就是一棵树(还是森林????),所以应该也可以做(????)。

线段树合并用的是动态开点线段树。

线段树合并时间是单 log 的。时间复杂度分析 好像 是每次合并删掉多少点什么的,忘了。合并不会新建点,所以合并不会增大空间,空间是一开始的 log * n 级别的(在每个结点只有一个元素的情况下)。

线段树合并相当于把两棵线段树的信息相加。这可以用来优化那种形如 \(f_{u,i} = (v \in ch_u) f_{v,i} \cdots\) 的 DP,(我好像现在只会二叉树(最多只有两个儿子)的,但应该儿子更多也是一样的吧(如果 DP 没有什么其他的限制,其他限制比如 DP 方程里要求乘上另一个儿子的什么东西)?)即直接把信息拿上来(位置是不变的)再做修改。同时线段树支持[区间乘](?)[这种](?)操作,可以快速地修改。还可以也利用线段树的其他东西来优化这种 DP。例题是 [PKUWC Minimax](?)。

李超线段树可以优化把李超线段树优化 DP 或者斜率优化 DP 搬到树上的 DP。例题好像是 CF 上一题,可以去今天的 PPT 里或者题单里找。

2024.8.19

标签:总结,set,log,线段,合并,儿子,树上,DP
From: https://www.cnblogs.com/huangkxQwQ/p/18368268

相关文章

  • 8.19日总结
    今天是周一,果然大脑放松了两天,回来工作效率都提高了,一上午解决了两个问题,上周五搞半天也没搞定。第一个就是新板子无法升级的问题,排查了好久也没发现问题所在,进入BOOT区后只会发送00,当时考虑是占用了外部晶振的IO口,但是我们没有使用外部晶振,那两个IO口做普通IO口使用。把电阻取下......
  • 2024.8 总结
    杂题【YBOJ】Pair题目描述给出二维平面上的\(n\)个点,第\(i\)个点的坐标为\(x_i,y_i\)。定义点\(i\)与点\(j\)之间的距离为\(\frac{|x_i-x_j|+|y_i-y_j|}{\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}}\),求平面上两点的距离最大为多少。($1\len\le10^5$)解题思路首先,我们......
  • tcp与udp的总结+connect阻塞+tcp三次握手、四次挥手+常见的服务器IO(发送数据+接收数
    一,TCP与UDP的基本总结TCP(传输控制协议)和UDP(用户数据报协议)是两种主要的传输层协议。TCP是面向连接的,提供可靠、顺序的传输,适用于需要高可靠性的应用,如网页浏览和文件传输。它通过重传机制和流量控制确保数据完整性。UDP是无连接的,速度快但不保证数据的可靠性和顺序,适用于对实时性......
  • [Mysql]日志刷盘总结
    Mysqlredolog的刷盘时机mysql正常关闭的时候redologbuffer写入超过一半的时候后台线程每隔一秒写入磁盘一次0把redologbuffer中的内容刷盘2把pagecache中的内容刷盘事务提交的时候0每次提交事务,redolog留在buffer中不写入磁盘1每次提交事务,redolog写入磁......
  • Java基础——HttpStatus.class 源码中状态码总结
    HttpStatus.class源码中状态码总结HttpStatus.class源码////Sourcecoderecreatedfroma.classfilebyIntelliJIDEA//(poweredbyFernFlowerdecompiler)//packageorg.springframework.http;importorg.springframework.lang.Nullable;publicenumH......
  • 数论总结
    数学是毒瘤基础数论总结。数论题的代码都是一个个板子拼起来的,本博客只放板子。声明:本博客中出现的所有代码,都视为加入了#defineintlonglong数论题的特点题目大意简洁易懂。但有的题还是会古舟一堆码量小,全是板子极其难想,需要手推公式longlong是标配筛......
  • HW行动之蓝军总结参考
    HW行动,攻击方的专业性越来越高,ATT&CK攻击手段覆盖率也越来越高,这对于防守方提出了更高的要求,HW行动对甲方是一个双刃剑,既极大地推动了公司的信息安全重视度和投入力量,但同时对甲方人员的素质要求有了很大提升,被攻破,轻则批评通报,重则岗位不保;大的金融、央企可能不担心,有很强的防护,......
  • jdk8的Steam流工作常用方法总结
    Steam流工作常用方法总结收集list以某几个字段为键以内容为list的mapMap<String,List<TVoucherDetail>>tVoucherDetailMap=list.stream().collect(Collectors.groupingBy(obj->obj.getDocumentNumber()+"-"+obj.getCertificationData()......
  • JS逆向总结
    总结在进行JS逆向中常用的手段1)Object.defineProperty:对于对象属性的监控 该方法是es5的方法(千万不要以为是es6的哦),作用是直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。(切记只能用在对象身上不能用在数组身上)1、语法 代码解读Obj......
  • 总结指针数组与数组指针的区别
    1、指针数组1-1、定义指针数组是一个数组,其元素是指针。这意味着数组的每个位置都存储了一个指针,这些指针可以指向任何类型的数据(包括其他数组、结构体等)。1-2、类型如果有一个指向整数的指针数组,其类型可能是 int*arr[N];,这里 arr 是一个数组,包含 N 个 int* 类型......