换根DP学习笔记

祝我中秋节快乐[图片来源于网络]

声明:换根 DP 不是树形 DP,不要用树形 DP 的思路学换根 DP

引入

Luogu P3478算是一道经典的换根 DP 题。

不考虑任何优化,纯朴素做法怎么做?

我们以每一个点为根跑一遍 DFS,求答案即可,非常简单。

但是这样的时间复杂度是 $ O(n^2)$ 的,非常慢。

所以有了换根 DP

思路

其实大部分换根 DP 的思路都是一样的

首先,n 个点你不会求,1个点肯定会求吧

我们以4节点为根先求一遍,(样例)得到了下图

graph (4)

此时的答案是18

那么,我们如果把5作为根,也就是把5提起来,变成了这样

graph (3)

我们肯定不能正常计算贡献了,这样就和暴力做法一样了

可以看到,我分了三块

先看到第3块,在换根前后,这两个点的贡献变化就是5号少了点权1,4号加了点权1

那么在看第1块,这一个块里面所有点都增加了一个边权1

再到第三块,可以发现,第三块中的点距离都增加了边权1

posted @ 2025-10-06 20:09  KK_SpongeBob  阅读(9)  评论(0)    收藏  举报