发现自己学习的换根dp全是假的。 我们在换根dp时,第一次dfs考虑处理出任意一个根的答案。 第二次dfs时,我们当前节点为\(x\)。 我们考虑求出\(x\)的某个儿子\(v\)的答案,从\(v\)回到\(x\)后再求出以\(x\)为根的答案。 这需要在\(O(1)\)的时间内更新dp值。 视情况用set/加减法/维护最大次大维护。 以前写的都是\(O(deg)\)维护dp值,结果做一道简单题才发现自己的理解全是错的。