什么是换根DP及第一步操作说明

第一步 以任意一点统计

我们规定任意一个点作为根 root,进行树形 DP 的操作。

获取以确定 root 为根的状态下,所有子树的深度 deep[]。

具体的,设当前 dfs 的点为 cur,孩子节点是 nex:

  1. 对每个进入 dfs 的 deep[cur] 初始化为 1,表示当前节点可以有层数为 1 的贡献
  2. 遍历每个每个孩子节点
  • 先递归操作 nex 节点,当递归结束到下一行代码时,表明 deep[nex] 已经计算好了
  • 将获得的 deep[nex] 对当前 deep[cur] 进行松弛。注意松弛时,要累计上 cur 的这层,可得 deep[cur] = max(deep[cur], deep[nex] + 1);

以上的描述,就是最基础的树形 DP 操作。也是换根 DP 中的第一轮扫描。

下方是假设以点 3 为 root 的搜索结果:

相关推荐
阿文的代码库3 小时前
换根技巧实例分析:最小高度树
算法·动态规划
不知名的老吴4 小时前
浅谈:树形动态规划中的换根技巧
算法·动态规划
叶小鸡7 小时前
小鸡玩算法-力扣HOT100-动态规划(上)
算法·leetcode·动态规划
_F_y8 小时前
树形 DP 从入门到进阶:普通树形DP、树形背包、换根DP
c++·动态规划
呃呃本8 小时前
算法题(动态规划)
算法·动态规划
承渊政道10 小时前
【贪心算法】(经典实战应用解析(六):整数替换、俄罗斯套娃信封问题、可被三整除的最⼤和、距离相等的条形码、重构字符串)
c++·算法·leetcode·贪心算法·排序算法·动态规划·哈希算法
故事和你9110 小时前
洛谷-【图论2-4】连通性问题1
开发语言·数据结构·c++·算法·动态规划·图论
故事和你9111 小时前
洛谷-【图论2-4】连通性问题2
开发语言·数据结构·c++·算法·动态规划·图论