看到了[Noi2014]购票这道题目,发现了这种操作(为什么之前没想到呢。。。)
代码还没写过,先口胡一下
有根树上的DP,每个点只能从祖先转移。
那么考虑点分治
选出一个联通块的重心root
之后,以root
为根,有若干棵子树。找到root
的父亲所在的子树,先递归更新这棵子树。然后再用这棵子树中root
的所有祖先来更新root
以及其他子树
大概就是这个意思
不过应该也不只局限于DP,但是这些问题有一些限制:
贡献的计算必须是与祖先有关的。如果贡献里有两个点产生贡献但是没有一个点是另外一个点的祖先,那么应该就不能做了吧。(因为这样的话就还要计算不含root
的父亲的子树之间产生的贡献了)