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

第一步 以任意一点统计

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

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

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

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

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

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

相关推荐
冻柠檬飞冰走茶2 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
Dream it possible!20 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
小此方1 天前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划
-梅1 天前
算法(1) 动态规划
算法·动态规划
UIU1142 天前
P1481 魔族密码
c++·算法·动态规划
j7~6 天前
【动态规划算法专题】动态规划五部曲实战:泰波那契数、三步问题、最小花费爬楼梯
c++·算法·动态规划·数据结构与算法
Tisfy6 天前
LeetCode 3665.统计镜子反射路径数目:三个动态规划数组
leetcode·动态规划·代理模式·题解
Tisfy7 天前
LeetCode 3882.网格图中最小异或路径:动态规划
算法·leetcode·动态规划
UIU1149 天前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
木井巳10 天前
【动态规划: 路径问题】下降路径最小和
java·算法·leetcode·动态规划·推荐算法