题目链接
浅谈换根dp:
- 换根dp一般解决什么样的题呢?
给你一棵树,问你每个节点到其他节点的路径信息(路径最大值,最小值等等)。它是在树型的基础上加上了换根的功能。
换根dp的步骤:
- 首先:用树型dp求出以1为根节点的dp值——第一个dfs。
- 其次:求出以u为根节点的dp值,然后换根——第二个dfs。
换根细节:
第一:先求出以u为根节点的dp值。并将以u为根节点的dp前缀信息保存在vector中(记得存0),这样做的目的是为了在接下来的换根过程中还原u节点的dp值,把dp[ u ]作为答案保存。
第二:然后换根,倒着换,这样可以避免不必要的麻烦。换根过程中,先还原u的dp值,然后判断要换的那个节点是否之前已经换过。注意一定要先还原dp值然后判断。
题意:给你一棵树,按顺序输出以每个顶点为根节点,到任意点的边权和最大,输出这个最大值。
思路:设dp[ i ] 为以 i 为根节点,他的子代到 i 的距离最大值,然后换根dp求之。
#include <bits/stdc++.h&g