树形背包bzoj4033: [HAOI2015]树上染色

Posted antiquality

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树形背包bzoj4033: [HAOI2015]树上染色相关的知识,希望对你有一定的参考价值。

仔细思考后会发现和51nod1677 treecnt有异曲同工之妙

Description

有一棵点数为N的树,树边有边权。给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并
将其他的N-K个点染成白色。将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间距离的和的收益。
问收益最大值是多少。

Input

第一行两个整数N,K。
接下来N-1行每行三个正整数fr,to,dis,表示该树中存在一条长度为dis的边(fr,to)。
输入保证所有点之间是联通的。
N<=2000,0<=K<=N

Output

输出一个正整数,表示收益的最大值。

Sample Input

5 2
1 2 3
1 5 1
2 3 1
2 4 2

Sample Output

17
【样例解释】
将点1,2染黑就能获得最大收益。

题目分析

这题目第一眼看上去根本不像是背包题吧……倒像是个贪心或者奇妙结论题。

但是可以像treecut一样,将答案按照树上每一条边来统计贡献。

技术分享图片

我们把一颗树沿某条边分开,看成这个样子。

那么显然若知道这条边左右两边黑白点各有多少个,就可以计算这个情况下的答案了。

也就是说,如果我们确定一条边来把树分开,那就可以依靠枚举来确定最优答案。

观察一下这个问题是具有最优子结构的,也就是说变成了一个树上背包的形式:左右两边黑白点个数的不同情况各有体积和价值,求最大价值。

我们定义$f[x][i]$表示以$x$为根的子树中,有$i$个黑点,这种情况的最大价值。

技术分享图片

考虑如何转移,

总结

一类难以通过树形结构直接转移的动态规划问题,可以考虑对于边将树划分为两个部分的子问题,再分别维护答案。

以上是关于树形背包bzoj4033: [HAOI2015]树上染色的主要内容,如果未能解决你的问题,请参考以下文章

bzoj4033: [HAOI2015]树上染色(树形dp)

bzoj4033 [HAOI2015]树上染色——树形DP

BZOJ4033: [HAOI2015]树上染色 树上背包

BZOJ4033[HAOI2015]树上染色 树形DP

BZOJ 4033 [HAOI2015]树上染色

BZOJ4033 [HAOI2015]树上染色 树形dp