树形DP选讲
序言:为了巩固树形DP简单状态设计与转移特设此文
做法:树形DP入门经典题,显然对于每个节点u有两种可能的情况一种为选一种为不选,且满足u与子节点v不能同时选故可设计出转移方程f[u][0/1]分别表示选或不选
f[u][1] += f[v][0]
f[u][0] += max(f[v][0],f[v][1])
做法:树上背包板子f[u][j]表示以u为根的子树内选j门课的最大方案
f[u][j] = max(f[u][j],f[u][j - k] +f[y][k])
做法:树上01背包,f[u][j]表示以u为根的子树保留j条边的最大方案
f[u][j] = max(f[u][j],f[u][j - k - 1] + f[y][k] + e[i].val)
做法:题目给出n十分小,故考虑用Floyd。按位转移f[k][u][v]表示u,v走2k能否,
h[u][v]表示两点能否到达
f[k][u][v] |= f[k - 1][u][w] & f[k - 1][w][v],h[u][v] |= f[k][u][v]
再将h跑一边floyd即可
做法:换根DP板子
P2986 [USACO10MAR] Great Cow Gathering G
做法:换根DP板子
做法:f[u][0/1]表示此节点放或不放的情况
f[u][0] += f[v][1] f[u][1] = min(f[v][0],f[v][1])
做法:换根DP简单应用,题意为有向图,但其实可以将其翻转操作变为权值再进行DP,二次扫描即可
做法:将题目转化为深度题即可
P4084 [USACO17DEC] Barn Painting G
做法:每种颜色分一类转移即可
P3047 [USACO12FEB] Nearby Cows G
做法:一眼换根,第二次扫描时注意回溯操作即可
做法:比较显然的树形DP,找根再DP时判断即可
[USACO08JAN] Cell Phone Network G
做法:较复杂的树形DP,显然可以设计出f[u][0/1/2]分别表示u节点自己染色/儿子染色/父亲染色,答案为min(f[1][1],f[1][0])
下面考虑转移
f[u][0] += min(f[v][0/1/2])
f[u][2] += min(f[v][0/1])
但f[u][1]较难转移因为只需有一个儿子染色即可,故假设每个v都染色
f[u][1] += f[v][0] g[++cnt] = f[v][1] - f[v][0]
给g排序如果g[i] < 0的话不选此儿子需要进行反悔操作
f[u][1] += g[i](注意枚举儿子最后一个不能也枚举)
做法:设计f[u][0/1]表示以u为根的子树中恰好有一个黑点的方案数
f[u][1] = f[u][1] * (f[v][0] + f[v][1]) + f[u][0] * f[v][1]
f[u][0] = f[u][0] * (f[v][0] + f[v][1])
做法:思考一下选定根节点后最大权值是否确定,显然是确定的。那么
f[u] = si[u] + ∑f[v] g[1] = n + ∑f[i](i∈E)
然后就是常规换根g[y] = g[x] + n - 2 * si[y]
做法:基环树的题因为相邻两个点不能同时选故要判环,用并查集即可
用找出来的两个点来进行DP f[u][0] += max(f[v][1],f[v][0]) f[u][1] += f[v][0]

浙公网安备 33010602011771号