Day 3:图论部分 feecle6418讲课记录

上午::树链剖分,线段树合并与树上 DSU

都会啊,直接讲题吧

注意事项:

注意:使用树上数据结构之前,建议先想一想

  1. 能不能只用基本技巧解决,不用高级数据结构。
  2. 能不能直接转为偏序问题等经典问题。

偏序问题

例子如下:

两棵树的子树交:

用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吧。

posted @ 2025-06-25 21:41  thousands_of_years  阅读(39)  评论(1)    收藏  举报