HDU2196 Computer(树形dp+换根)

博客介绍了如何解决HDU2196题目的思路,该题目要求求解一棵树中每个节点到其他节点的最大路径权值和。通过固定起点的一次DFS无法满足效率要求,因此采用树形动态规划和换根技巧进行优化。在预处理后,可以在线性时间内得到所有节点的答案。文章详细解释了换根过程中答案由三部分组成,并阐述了如何用dp数组维护这三个部分的最大和次大距离,以便高效求解问题。
摘要由CSDN通过智能技术生成

原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=2196
题意:求一棵树中距离每一个节点的最大路径权值和。

思路:假如固定了起点,那么我们通过一遍 d f s dfs dfs就可以得到距离根节点中最远的点的路径权值和,但是这题需要输出 n n n个点的答案,显然对每一个点的跑一遍 d f s dfs dfs是不可行的。所以需要进行优化。

可以使用一种换根的技巧,在预处理之后可以在 O ( n ) O(n) O(n)的时间内求出每一个节点的答案。

在这里插入图片描述
对于上图中的 v v v节点来说,如果要把根从 u u u节点移动到 v v v节点,答案的贡献来自于 3 3 3个部分,也就是图中的绿色区域。一个是 v v v的子节点中可以贡献一个 a n s 1 ans1 ans1,一个是以u为根的子树-以v为根的子树的其余节点可以贡献一个 a n s 2 ans2 ans2,一个是以 u u u的父亲节点的子树减去以 u u u为根的子树可以贡献一部分答案。
总体答案就是这 3 3 3部分取个 m a x max max
所以写代码的时候维护一个 d p [ m a x n ] [ 3 ] dp[maxn][3] dp[max

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值