Compressed Tree

首先官方题解写的挺好的,可以看

为什么需要在DP状态中定义i及其父亲的这条边也在呢?你可以试试不定义,那么你会发现是推不走的,因为比如我们现在正在推i,那么他的一个儿子u的DP值都知道了,但是由于有了(u,i)这一条边,我们就把u的度数改变了,这个时候u的DP值就不在适用了

综上,其实我们也可以这么定义:f[i][0/1/2/3]表示以i为根的子树,i选了0/1/2/3个子节点(其中3代表3个子节点及以上)的最优值,状态转移方程见CF代码

update 2024.6.30

这道题目可以用树形DP的本质还是在压缩过程中,任何一个不被删掉的点的度数不被改变,所以树最终形态与压缩点的顺序无关,所以在选子树的时候,不妨先压缩子树,然后由于根节点的度数不变,所以可以按照根节点选择的子节点个数去判断是否删除根节点

所以以后告诉顺序无关了,可能是在告诉无后效性,可以往DP想

update 2024.8.31

重新做了一遍,比较容易地做出来了

posted @   最爱丁珰  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示