Day 3:图论部分 feecle6418讲课记录
上午::树链剖分,线段树合并与树上 DSU
都会啊,直接讲题吧
注意事项:
注意:使用树上数据结构之前,建议先想一想
- 能不能只用基本技巧解决,不用高级数据结构。
- 能不能直接转为偏序问题等经典问题。
偏序问题
例子如下:
两棵树的子树交:
用dfn序把子树拍平成两个序列,我们要找(\(l_1<id1_x<r_1\) 和 \(l_2<id2_x<r_2\))的满足的数,二维偏序问题,树状数组即可。
(链交)暴力找出链所包含区间,做一遍笛卡尔积,再来一遍cdq,O(nlogn^3)。
有几个子树内深度 \(=𝑥\) 的点到 \(x\) 的距离 \(≤𝑑\)(有边权)
易得三维偏序,分别是(\(x-1<dep_u<=x,l<=id_u<=r,dis_x<=dis_u<=dis_x+d\))
发现第一维很丑,考虑离线把它优化掉。把询问和查询点分组,于是可以树状数组做二维偏序了。
倍增
倍增还是蛮有用的。
询问 𝑥→𝑦 路径上的点点权依次拼接形成数组的最大子段和。
维护四元组。
由于没有修改,没必要用树剖,就是维护 \(ls,rs,maxsum,rlen\) 即可。
点权保证是 0~9 的整数,询问 𝑥→𝑦 路径上的点点权依次拼接形成整数的值。
维护路径长度和权值。需要对上和下维护两种倍增数组。
幂等信息
某个信息 \(𝑥\) 是幂等的,就是说 \(𝑥\),\(𝑥\) 合并之后还是 \(𝑥\)。
对于幂等信息,原先合并要求“不重不漏、顺序不变”,现在只需要“不漏”就够了。
把该思想用到不带修序列信息维护上,有时能取得比线段树更优的询问复杂度,称此时的倍增数组为 ST 表。
后面的看PPT吧。

浙公网安备 33010602011771号