今日份水题2018.11.2

本文探讨了树形动态规划的突破与应用,通过解析HDU2196和POJ2378两题,深入浅出地介绍了树形DP的算法思路与实现细节,回顾了JLOI2016侦察守卫题目的挑战。

这几天想突破一下树形DP,这也是高中时候一直没能搞定的。

今天先来两道简单的水一下。

HDU2196 Computer 给一棵树,求树中每个点离其他点最远的距离。每个点第一遍DFS记录能达到的最远距离dp1[]和次远距离dp2[],之后第二遍dfs,每次先更新当前节点答案然后再向下搜。如果当前节点位于父节点答案所在链上,即dp1[j]+w[i,j]=dp1[i],此时又分两种情况1: dp1[j]<dp2[i]+w[i,j],则dp2[j]=dp1[j],dp1[j]=dp2[i]+w[i,j],2:dp1[j]>=dp2[i]+w[i,j],则dp1[j]不变,dp2[j]=max(dp2[j],dp2[i]+w[i,j])  剩余情况就是当前节点不在父节点答案所在链上,这时dp2[j]=max(dp1[j],dp2[i]+w[i,j]),dp1[j] = dp1[i]=w[i,j]。注意两个数组的赋值。

POJ2378 Tree Cutting 给一棵树,求出树中所有满足条件的点:将这个点除去,剩余所有联通块大小不超过总结点数的一半。第一次dfs统计子树大小,第二次dfs时,若子树小于一半节点,直接返回,遍历所有子节点,记一个flag,子树中如果出现大于总结点一半的,flag=false,并且搜索该子树,碰到等于一半的可以直接记录答案。最后搜索完所有的子节点,如果flag=true,将本节点计入答案。

永远忘不了被一道各位大佬称之为“简单树形DP”的JLOI2016侦察守卫虐到怀疑人生

转载于:https://www.cnblogs.com/hzs2000/p/9899116.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值