HDU 5293 树链剖分 + 树形DP

该博客探讨了一种利用树链剖分和树形动态规划来解决HDU 5293题目的方法。在给定的有n个节点和m条链的树中,目标是选出不共享节点的链子集,最大化权值和。博主分析了两种情况:一种是存在一条链通过节点u且u是链上两点的最近公共祖先,另一种是没有这样的链。通过对圈上节点的处理,使用线段树维护sum和dp数组,实现高效的解决方案。
摘要由CSDN通过智能技术生成

题目链接


题意:
给定有 n n n个节点的树和 m m m条链(链连接两个顶点,且有权值),要求选出一部分链,使连接以后图的每个圈没有公共节点,问能够选出的链的权值和最大为多少?


考虑树形DP。

对于当前顶点 u u u,假设 d p [ u ] dp[u] dp[u]为以 u u u为根节点的子树所能够达到的最大目标值。
另外定义:
1. w w w为当前考虑的链权值。
2. s u m [ u ] = ∑ d p [ k ] sum[u] = \sum dp[k] sum[u]=dp[k]( k k k u u u的子节点)。

则分两种情况考虑:
一是存在某一条链,所连接形成的圈经过 u u u,且 u u u为链上两点的 L C A LCA LCA则:
d p [ u ] = w + ∑ d p [ k ] dp[u] = w + \sum dp[k] dp[u]=w+dp[k]( k k k为圈上节点的子节点)
画图后容易发现:
d p [ u ] = w + ∑ d p [ k ] = w + ∑ s u m [ x ] − ∑ d p [ x ] dp[u] = w + \sum dp[k] = w + \sum sum[x] - \sum dp[x] dp[u]=w+dp[k]=w+sum[x]dp[

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值