换根dp学习笔记

最近模拟赛经常做到,于是我就学习了一下。

算法原理

换根 d p dp dp的题一般都会给出一个无根树,因为以不同的点为根时,问题的答案不一样,所以它会让你输出答案的最大或最小值。

暴力去做这种题,就是以每个点为根然后跑一遍 d f s dfs dfs算出答案即可。

时间复杂度为 O ( N 2 ) \mathcal O(N^2) O(N2)。

但是这样过不了,所以我们需要以更快的时间去解决问题。

我们先定义两个数组 f 1 i f1_i f1i表示点 i i i子树内的贡献, f 2 i f2_i f2i表示子树外的贡献。

以下图为例,我们以点 2 2 2为根。

我们需要将根从点 2 2 2转移到点 5 5 5,这个时候我们可以将这棵树拆分成两部分,一个是 2 2 2以上的点,一个是 5 5 5的兄弟节点,根转化过后, 5 5 5的兄弟节点变为它的孙子节点。

我们计算点 5 5 5的答案就用 f 2 2 + f 1 2 − f 1 5 f2_2+f1_2-f1_5 f22+f12−f15。

形式化的来讲,就是对于点 u , v u,v u,v, v v v是 u u u的儿子。

v v v的答案就等于 u u u上方的贡献加上 v v v兄弟节点的贡献。

具体题目计算贡献的方法不同但原理是一样的。

算法例题

版题1

版题2

比版题要难上一些1

比版题要难上一些2

计算贡献的地方比较巧妙

例题会不断更新,并且这些题我后面都会写出题解挂在这篇博客里面。

相关推荐
许长安1 小时前
RPC 同步调用基本使用方法:基于官方 RouteGuide 示例
c++·经验分享·笔记·rpc
做cv的小昊5 小时前
【TJU】研究生应用统计学课程笔记(8)——第四章 线性模型(4.1 一元线性回归分析)
笔记·线性代数·算法·数学建模·回归·线性回归·概率论
我命由我123456 小时前
程序员的心理学学习笔记 - 空杯心态
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
stm32 菜鸟6 小时前
nucleo-f411re学习记录-13,flash的操作
学习
晓梦林6 小时前
3170靶场学习笔记
笔记·学习
ZC跨境爬虫7 小时前
跟着 MDN 学 HTML day_17:媒体与 Web Audio API 自动播放指南——策略、检测与最佳实践
前端·笔记·ui·html·音视频·媒体
ErizJ7 小时前
Redis|学习笔记
redis·笔记·学习
加油20197 小时前
方法论:如何系统性的学习?
学习·学习方法·方法论
Amazing_Cacao7 小时前
CFCA精品可可饮品认证课程高级压力测试:在极端液态变量中,捍卫精品巧克力品质的稳定复现法则
笔记
小t说说8 小时前
科学素养培养:男孩女孩的不同“方程式”,真的有分性别学习平台?
学习