FarmCraft
题意:mhy住在一棵有n个点的树的1号结点上,每个结点上都有一个妹子。mhy从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装zhx牌杀毒软件,第i个妹子安装时间为ci。树上的每条边mhy能且仅能走两次,每次耗费1单位时间。mhy送完所有电脑后会回自己家里然后开始装zhx牌杀毒软件。卸货和装电脑是不需要时间的。求所有妹子和mhy都装好zhx牌杀毒软件的最短时间。
分析:不难想到使用树形dp,因为最短时间显然由最后安装完电脑的妹子决定,所以dp[i]表示i所有子树中最后安装完电脑的妹子所需的最短时间,那么如何规定访问的顺序呢?考虑如果该节点所有的儿子均为叶子节点,那么对于x任意两个子节点y,z,显然dp[x]是先走y与先走z中决策的最小值,即dp[x]=min(max(cy+1,cz+3),max(cy+3,cz+1))若cy>cz,则dp[x]=min(max(cy+1,cz+3),cy+3)因为cy+3显然是这几项里的最大值,所以dp[x]=max(cy+1,cz+3)所以也就说明了要先走y再走z顺序,也就是将所有儿子从大到小排序并从最大的开始按照顺序选择,那么推广到一般情况呢,还是对于任意x的任意两个子节点y,z,dp[x]当然也是先走y与先走z中决策的最小值,如果先走y再走z,那么首先你要花1的时间从x到达y,然后再讲y点看成一个修电脑时间为dp[y]的妹子,那么总时间就是dp[y]+1,然后再走z,这个时候根据题目要求你应该已经走完了y子树中所有的节点,而因为只有走边需要花费时间,所以子节点(包括本身)为num[y]个的y子树应该有num[y]-1条边,再加上从x到y的那一条边就一共有num[y]条边,而这些边每条边需要走两遍,最后再回到x节点,所以总花费就是num[y]*2的时间,然后再从x走到z最终是花费dp[z]+num[y]*2+1的时间,而该种走法的最终时间就是max(dp[y]+1,dp[z]+num[y]*2+1),而另一种走法也同理,最终时间是max(dp[z]+1,dp[y]+num[z]*2+1),dp[x]也就等于这两种走法中的最小值,观察这两个式子dp[z]+num[y]*2+1一定是比dp[z]+1大的,如果dp[z]+num[y]*2+1还比dp[y]+num[z]*2+1大的话显然就一定选择第二种,也就是说dp[z]+num[y]*2+1与dp[y]+num[z]*2+1这两项的大小关系直接影响到我们选择的顺序,而且如果dp[z]+num[y]*2+1>dp[y]+num[z]*2+1的话就选第二种(先走z),否则就选第一种(先走y),稍微化简一下就能得到如果dp[z]-num[z]*2]>dp[y]-num[y]*2的话就先走z,否则先走y,所以要讲x的子节点按照dp[i]-num[i]*2排序,再从大到小选择
最后的走法就是到达这个点之后先让他把这个点的电脑修一下,毕竟不修白不修,然后开始按照上述选择子节点的顺序选择子节点,该点的dp[x]值就是该种走法下每个子节点所需时间与cx的最大值,要注意的是这里的每个子节点所需时间与dp[i]不同,这个地方表示的所需时间是包括了之前走别的地方所花费的时间,具体来说如果这个节点是最后走的,那他应该加上前面所有需要走的边数*2+1(+1为x到这个节点的时间。还有一个很关键的问题,区别好等待时间与实际的时间,比如可能会有个问题,x节点的最后一个子节点与x连的这条边好像返回没有被记录,实际上不需要记录这条边所产生的时间,因为dp[x]表示的是安装完电脑所需的最短时间而不是回到初始点所花费的时间,如果你在未回到起始的1号点时就已经把别的电脑都修完了,那么你所用的时间只是所有边的花费*2+c1,具体可以看看这组数据来感受一下,也就是说最终的结果其实是max(dp[1],(n-1)*2+c1) 其中n-1表示这个树的总边数。
4
1 1 1 1
1 2
2 3
3 4
代码:

FarmCraft的更多相关文章
- [补档][Poi2014]FarmCraft
[Poi2014]FarmCraft 题目 mhy住在一棵有n个点的树的1号结点上,每个结点上都有一个妹子. mhy从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装zhx牌杀毒 ...
- FarmCraft[POI2014]
题目描述 In a village called Byteville, there are houses connected with N-1 roads. For each pair of ho ...
- [BZOJ 3829][POI2014] FarmCraft
先贴一波题面... 3829: [Poi2014]FarmCraft Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 421 Solved: 197[ ...
- BZOJ3829[Poi2014]FarmCraft——树形DP+贪心
题目描述 In a village called Byteville, there are houses connected with N-1 roads. For each pair of ho ...
- 【BZOJ3829】[Poi2014]FarmCraft 树形DP(贪心)
[BZOJ3829][Poi2014]FarmCraft Description In a village called Byteville, there are houses connected ...
- 【bzoj3829】[Poi2014]FarmCraft 贪心
原文地址:http://www.cnblogs.com/GXZlegend/p/6826667.html 题目描述 In a village called Byteville, there are ...
- [POI2014][树形DP]FarmCraft
题目 In a village called Byteville, there are houses connected with N-1 roads. For each pair of houses ...
- FarmCraft --(树形DP)
题目描述 In a village called Byteville, there are houses connected with N-1 roads. For each pair of hous ...
- 【树形dp】Farmcraft
题目 In a village called Byteville, there are houses connected with N-1 roads. For each pair of houses ...
- 【树形DP】BZOJ 3829 Farmcraft
题目内容 mhy住在一棵有n个点的树的1号结点上,每个结点上都有一个妹子i. mhy从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装zhx牌杀毒软件,第i个妹子安装时间为Ci. ...
随机推荐
- Array(数组)对象-->unshift() 方法
1.定义和用法 unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度. 语法: array.unshift(item1,item2, ..., itemX) 参数:item1,it ...
- iphone se2的优缺点分析:
4月15日晚间消息,在毫无征兆的情况下苹果公司刚刚正式发布iPhone SE二代手机,这款传闻多年的产品终于出现,国内定价人民币3299元起.本周五开始预定,4月24日开始送货. Phone SE ...
- SpringBoot入门系列(十一)统一异常处理的实现
前面介绍了Spring Boot 如何整合定时任务已经Spring Boot 如何创建异步任务和定时任务.不清楚的朋友可以看看之前的文章:<Spring Boot 入门系列文章> 接下来主 ...
- hadoop(五)scp命令copy文件和配置(完全分布式准备二)|7
机器的克隆参考centos7克隆ip|机器名|映射关系|别名配置(hadoop完全分布式准备一) 那么问题来了,如果我们有30台机器,之间可以互相访问,那我们如何快速安装配置环境如jdk hadoop ...
- STC15W串口通信的一些梳理
由于控制串口1进行通信移植到串口3出现了阻力,因此很有必要对串口通信进行更进一步的梳理>>>> 一 STC15W串口对应引脚: 由此我们得到四个串口引脚分别为:串口1:P3 . ...
- Linux中使用netstat命令的基本操作,排查端口号的占用情况
Linux中netstat命令详解 Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的状态信息.Netstat用于显示与I ...
- 关于在React中 报Super expression must either be null or a function, not undefined (采坑系列)
今天突然在联系React中遇到一开始就报 Super expression must either be null or a function, not undefined 百度,各种方法,.. ...
- AJ学IOS(24)UI之注册案例
AJ分享,必须精品 先看效果 制作思路 在做这个的时候,首先用stroyboard画出来界面UI,这个很简单,不多说了,然后下一步就是自定义xib做键盘上面的那一栏了,需要自己做xib还有view,详 ...
- 教你如何在工作中“偷懒”,python优雅的帮你解决
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取htt ...
- 如何让一张图片变成二值图像?python+opencv图像处理
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:张熹熹 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...