换根DP学习笔记
祝我中秋节快乐[图片来源于网络]
声明:换根 DP 不是树形 DP,不要用树形 DP 的思路学换根 DP
引入
Luogu P3478算是一道经典的换根 DP 题。
不考虑任何优化,纯朴素做法怎么做?
我们以每一个点为根跑一遍 DFS,求答案即可,非常简单。
但是这样的时间复杂度是 $ O(n^2)$ 的,非常慢。
所以有了换根 DP
思路
其实大部分换根 DP 的思路都是一样的
首先,n 个点你不会求,1个点肯定会求吧
我们以4节点为根先求一遍,(样例)得到了下图

此时的答案是18
那么,我们如果把5作为根,也就是把5提起来,变成了这样

我们肯定不能正常计算贡献了,这样就和暴力做法一样了
可以看到,我分了三块
先看到第3块,在换根前后,这两个点的贡献变化就是5号少了点权1,4号加了点权1
那么在看第1块,这一个块里面所有点都增加了一个边权1
再到第三块,可以发现,第三块中的点距离都增加了边权1
本人(KK_SpongeBob)蒟蒻,写不出好文章,但转载请注明原文链接:https://www.cnblogs.com/OIer-QAQ/p/19127871

浙公网安备 33010602011771号