树形dp刷题
整理日期参照赛事或原文时间线安排,不代表原始发表时间。实际整理于 2026-10-24。
原文涉及的赛题或内容至少已到 2022-01-29,整理日期据此安排;其余保留难度排序。
时间依据
- 牛客竞赛动态规划专题班树型dp例题:2022-01-29
- 牛客竞赛动态规划专题班树型dp练习:2022-01-29
难度为阅读建议,可从 ACM 学习索引 按阶段阅读。
专题班树型dp练习https://ac.nowcoder.com/acm/contest/28260#question
原问题求树上的最大独立集
Solution:仔细读题,一开始以为每次选择的地点是连续的,导致求成最大深度了。实际上是最大独立集。
debug:对于每个儿子的贡献需要累加,叶子节点需要赋初值。
1 | vector<int>e[N]; |
伪装成树上dp的树上贪心
题意:给定一棵树,树上每个节点都有一个权值k[i],表示如果染色这个点到根的树链上能免费染色距离i不超过k[i]的点,求最少染色次数
Solution:贪心还是需要慢慢分析,中间更新最大值也算dp(bushi).
-
由于每个点都只会被他子树以内的点染色,我们每次维护它的子树除了它能染色的最大高度。如果为0,说明之前的贪心策略无法满足,需要多花费一次染色次数,
-
考虑选择能贡献最大的点,这个值也需要一直维护更新,具体来说就是u这个点k值和max(v的k值)-1去比较。
-
在花费一次染色机会的时候,用k去维护f
1 | //看似树上dp,其实树上贪心 |
https://www.nowcoder.com/discuss/353157393250983936?sourceSSR=search
专题班树型dp例题https://ac.nowcoder.com/acm/contest/28258
求树的重心
Solution:只需要枚举每个点,比较重儿子大小和父节点以上的大小,比较出最大连通块大小的最小值
1 | int sz[N]; |
树上问题选讲 - hztmax0 - 博客园 (cnblogs.com)
222222222222222树形背包总结 - lnzwz - 博客园 (cnblogs.com)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 爱飞鱼的blog!
