专题练习——树形DP
P1272 [USACO02FEB] 重建道路
思路
简单题,设 \(f_{u,j}\) 代表 \(u\) 子树,联通块大小为 \(j\) 的最小删边数,那么有 \(f_{u,i+j}=min_{v \in son(u)}(f_{u,i}+f_{v,j}-1)\)(将两块合一起可以少减 \(u- v\) 这条边),注意非根节点答案要加一(删去连向父亲的边)
P3354 [IOI 2005] Riv 河流
思路
当前点的答案会受祖先影响,显然状态要维护这一影响:设 \(f_{u,j,p}\) 表示 \(u\) 子树,子树内建了 \(j\) 个伐木场,最近的伐木场为 \(p\),转移是好想的,难度在于状态设计
反思/启发
一开始想到是维护伐木场数和未到伐木场的木头数,但复杂度显然不过关
P6419 [COCI 2014/2015 #1] Kamp
思路
于10.7 NOIP 模拟的T1类似,答案都是一条直径加二倍周围的联通块,并且对于这道题,直径的一个端点必然在起点
直接维护不好换根,考虑转化:答案等于二倍联通块上的所有边-根节点最长链长度,两者都可以容易维护
反思/启发
对于转化不够敏感:当前状态设计不适合转移/换根时,要考虑转化
P3647 [APIO2014] 连珠线
也是一道好题
思路
性质推导
所有蓝链一定由以下两种基本结构构成

两种结构混在一起是不好做的,考虑寻找性质转化
性质:一个合法方案中,所有蓝链的中心点一定位于同一条根到叶子的链上
证明:如果不在同一条链上,就无祖孙关系(如图)

显然这样并不可行,无法同时将 \(1\) 与 \(2,3\) 连边
那么就有推论:一定存在一个点,以它为根时,合法方案全部由第一种结构构成
证明:
设所有“两个儿子都是蓝边”的中心点为 \([ x_1,x_2, \ldots , x_k ]\)
题解前面已经说明,这些中心点必须两两具有祖孙关系。因此,它们一定排列在同一条从根向下的链上:\(x_1\to x_2\to\cdots\to x_k\),其中 \(x_k\) 最深。
我们选择 \(x_k\) 的任意一个蓝边儿子 \(q\),将整棵树的根改成 \(q\)。
那么:
对于 \(x_k\): 因为新根就在它的某一个儿子方向,所以原来的这个儿子变成它的父亲。
对于 \(x_{k-1}\): 因为 \(x_k\) 一定是它蓝色儿子上的孩子,所以新根 \(q\) 同样在它的蓝色儿子方向,因此它也有一个儿子变成了父亲。
同理,对于所有 \(x_i\),新根 \(q\) 都在它们下方的某个子树中,所以它们都会失去“两个儿子都是蓝边”的形态。
至于原先已经是第一种结构的蓝链,因此根节点要么在父亲上,要么在蓝色儿子方向上,因此结果也不会改变
所以我们算出所有点为根时,只算第一种结构的最大值,整体的最大值就是答案
方程转移
因为一个点左右都不连蓝链显然不优,所以设 \(dp_{u,0/1}\),表示 \(u\) 节点是不是中心点(注意一个点可以既是中心点又是端点),转移方程如下:
\(\begin{cases} dp_{u,0}=\sum_{v \in son(u)} max(dp_{v,0},dp_{v,1}+dis(u,v)) \\ dp_{u,1}=dp_{u,0}+max_{v \in son(u)} dp_{v,0}+w-max(dp_{v,0},dp_{v,1}+dis(u,v)) \end{cases}\)(中心点时选择一个儿子作为端点,其余不变,因此算变化量的最大值)
启发/反思
什么时候需要换根:dp的结果因根的不同而变化(也可以说是答案由不同点为根的答案的总和构成,总和可以是sum,mul,min,max等)
P1453 城市环路
思路
基环树板题,相当于最大权独立集问题多加了一个限制,假设去掉的边为 \(s-t\) 那么分别以 \(s,t\) 为根dfs一次,答案就是 \(max(f_{s,0},f_{t,0})\)
反思/启发
没有想到求两次dfs,直接暴力维护的两点关系,尽管可做,但不优秀
P5904 [POI 2014] HOT-Hotels 加强版
思路
三个点距离相同一定可以表示为这样的形式:

这个 \(z\) 可以是祖先,也可以是其他子树上的点,因此我们需要维护两个深度相同点方案数,有应为要保证 \(z\) 的距离相同,所以维护 \(rt \to lca\) 和 \(x,y \to lca\) 的差值
设 \(f_{u,i}\) 表示 \(dis(u,k)=i\) 的点数,\(g_{u,i}\) 表示 \(dis(u,lca)+i=dis(x,lca)=dis(y,lca)\) 的点对数,那么有转移:
\(ans \larr \sum_{x,y \in son(u),x \neq y} f_{x,i-1}g_{y,i+1} \\ ans \larr f_{u,0} \\ f_{u,i} \rarr \sum_{x \in son(u)} f_{x,i-1} \\ g_{u,i} \larr \sum_{x,y \in son(u),x \neq y} f_{x,i-1}f_{y,i-1} \\ g_{u,i} \larr \sum_{x \in son(u)} g_{x,i-1}\),直接长链剖分即可
反思/启发
- 对于原题要求的转化
- 对于从转化形式自然想到状态设计
P4292 [WC2010] 重建计划
思路
这个题显然是01分数规划,把 \(e_i \to e_i - v\),那么问题变为求树上是否有一条长度为 \([L,U]\),总和大于 \(0\) 的路径,显然可以长链剖分,遍历儿子时线段树区间查询即可,这里有一个技巧,就是可以将其他儿子的数值合并到长链上,这样不会导致不同树信息互相影响
反思/启发
- 启发式合并在线段树上的体现

浙公网安备 33010602011771号