换根dp

特征

  1. 是一种树形 \(dp\)
  2. 所给出的树形结构为无根树,或某两个相邻的点的父子关系是不确定的;
  3. 要求求出每个节点答案。

解法

一般进行两次 \(dfs\)

  1. 第一次指定一个节点为根(通常为 \(1\))进行第一次 \(dp\),求出整个树在以 \(1\) 为根时的答案;
  2. 第二次进行换根,一般是将当前节点第一次 \(dfs\) 中的父亲节点进行交换。

\(dp\) 顺序:

  1. 第一次 \(dp\) 计算当前节点的答案要用到子节点的答案,因此 \(dp\) 顺序为由叶子节点到根节点
  2. 第二次 \(dp\) 继续计算当前节点的答案要用到父节点的答案,因此 \(dp\) 顺序为由根节点到叶子节点

注意:换根时要注意第一次 \(dp\)\(dp[fa]\) 的答案贡献会有来自 \(dp[u]\) 的部分,此时如果直接将 \(fa\) 变为 \(u\) 的子节点,然后 \(dp[u]\) 直接加上 \(dp[fa]\),那么就会出现重复计算的情况。因此要将 \(dp[fa]\) 先减去 \(dp[u]\) 再继续向下递归 \(dp\)


例题

CF1324F Maximum White Subtree

P3047 [USACO12FEB] Nearby Cows G

posted @ 2024-12-22 19:32  syzyc  阅读(17)  评论(0)    收藏  举报