树形DP总结

动态规划-树形类-总结

树形类的题,一般都需要用到子树的信息。

树形 DP 分为两类,一类是换根,一类是状态表示的是一棵子树的信息。

换根

母题1

考虑先求一个点的答案,然后对于向它的孩子进发,那么到它的孩子子树变近,其余变远。

考虑方式:父亲与孩子的变化

变式

本题需要用到正难则反的思想,求直的情况,发现只要求出树上两两路径总和,在经过几步组合数变换即可。可以用母题的方法除二直接求解。

子树信息

母题:

考虑令 \(f[i][0/1]\) 表示对于 \(i\) 不选/选,子树 \(i\) 的答案。

若选,那么子节点都不选。

若不选,子节点无所谓,取选/不选较大值。

变式

状态同上,表示的是从 \(i\) 到其父亲的边选择情况,且答案不包括那条边。关键在于转移。

首先发现若为 \(f[i][0]\),那么其子节点都可不选,然后我们可以贪心的替换成选的。若是 \(f[i][1]\) 少一个(若度为0答案标记为不存在)。

贪心替换需要从大到小排序,或者找第 \(k\) 个数。

需要用到快速排序/快速选择算法

基环树

严格上不能算,但是需要先用树形 DP,然后再对环上的点进行特殊的处理。

1

本题先使用树的直径(可用树形 DP,分别处理每个点向下的非严格次长/最长深度)处理掉没有越过环的情况。然后对于环上的点,可以处理到达的最深深度,然后用前缀和处理距离,用单调队列查询在下标范围内的答案。

2

母题的变式,变成了基环树。考虑断掉环上的一边,然后进行特殊处理再树形 DP

3

类似于2,但是树形 DP 的转移可以参考子树信息—变式(贪心)的做法。

规律

发现状态的表示无非是单个点为根的答案或子树的答案,然后记录一些特殊的属性(选择情况、选择个数)。

树形 DP 可能作为算法的一部分

基环树的分成处理环上或断环。

还有部分小技巧(贪心)

特征

一般要求在线性时间复杂度内解决问题,而且某个节点与其子节点有密切的联系,亦或是某个点的父亲与当前点的答案只有极少的不同。

posted @ 2023-08-31 09:07  wscqwq  阅读(4)  评论(0编辑  收藏  举报