淀粉质/变粉质学习笔记

前言

本学习笔记不过多涉及算法的思路以及代码实现,仅记录其实质方便拓展,以及一些遇到的小 trick。

实质

此段由于其特殊性,将动态更新。
更新时间:\(2024.03.04\)

淀粉质

这个算法的实质其实是每次找到一个点,记录与当前节点有关的答案,然后递归下去,这样就可以求出与每个点有关的答案。
也可以将多次询问离线下来,同样也是计算与当前点有关的答案。
那么在淀粉质中,如果是找路径/点对,我们找的重心可以是路径上的点(路径完全不定),也可以是路径的一个端点(路径确定一个端点),在这个时候我们就需要考虑到其它分治部分的贡献在分治其它部分时也要同时更新这一次分治断开的几个部分相互之间的贡献。

变粉质

这个算法和淀粉质相似,先对树进行处理,然后每次找到一条边,记录于这条边有关的答案再拆开树递归下去。
可以发现,变粉质相较于淀粉质更便于将两个部分的数据结构进行合并,更适于解决需要用数据结构合并维护信息求答案的问题。

Tricks

这里通过题目例举 trick。

P4886 快递员

这道题更能体现淀粉质作为分治算法的本质。
我们发现,每次分治我们其实能够直接找出答案所在的子树,所以不需要盲目地递归每一个子树,只要递归答案所在的子树即可。
并且不论我们找的是哪一个点,我们都无法避免地需要计算整棵树对这个点的答案的影响。

P6626 [省选联考 2020 B 卷] 消息传递

这道题就是上面提到的确定一个端点的题目,我们按照套路做就行。

P5351 Ruri Loves Maschera

这道题有一个非常奇怪但是很有用的 trick:若干条路径不方便合并时,我们考虑直接处理出所有路径,然后计算答案,减去同一子树的假贡献即可。
也就是说,淀粉和变粉其实是可以直接暴力处理路径的贡献而不用数据结构维护、合并信息的。

posted @ 2024-02-02 10:17  JR_ytxy  阅读(14)  评论(0)    收藏  举报