题意: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的更多相关文章

  1. [补档][Poi2014]FarmCraft

    [Poi2014]FarmCraft 题目 mhy住在一棵有n个点的树的1号结点上,每个结点上都有一个妹子. mhy从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装zhx牌杀毒 ...

  2. FarmCraft[POI2014]

    题目描述 In a village called Byteville, there are   houses connected with N-1 roads. For each pair of ho ...

  3. [BZOJ 3829][POI2014] FarmCraft

    先贴一波题面... 3829: [Poi2014]FarmCraft Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 421  Solved: 197[ ...

  4. BZOJ3829[Poi2014]FarmCraft——树形DP+贪心

    题目描述 In a village called Byteville, there are   houses connected with N-1 roads. For each pair of ho ...

  5. 【BZOJ3829】[Poi2014]FarmCraft 树形DP(贪心)

    [BZOJ3829][Poi2014]FarmCraft Description In a village called Byteville, there are   houses connected ...

  6. 【bzoj3829】[Poi2014]FarmCraft 贪心

    原文地址:http://www.cnblogs.com/GXZlegend/p/6826667.html 题目描述 In a village called Byteville, there are   ...

  7. [POI2014][树形DP]FarmCraft

    题目 In a village called Byteville, there are houses connected with N-1 roads. For each pair of houses ...

  8. FarmCraft --(树形DP)

    题目描述 In a village called Byteville, there are houses connected with N-1 roads. For each pair of hous ...

  9. 【树形dp】Farmcraft

    题目 In a village called Byteville, there are houses connected with N-1 roads. For each pair of houses ...

  10. 【树形DP】BZOJ 3829 Farmcraft

    题目内容 mhy住在一棵有n个点的树的1号结点上,每个结点上都有一个妹子i. mhy从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装zhx牌杀毒软件,第i个妹子安装时间为Ci. ...

随机推荐

  1. redis修改密码以及验证登录,启动服务常用命令

    1.通过配置文件,直接修改 2.启动然后使用密码验证登录 3.redis常用命令 启动服务:redis-server --service-start重启服务:service redis restart ...

  2. split(resource,limit) 中limit 的含义

    limit 参数控制模式应用的次数,因此影响结果数组的长度.如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入 ...

  3. 数据结构和算法(Golang实现)(8.1)基础知识-前言

    基础知识 学习数据结构和算法.我们要知道一些基础的知识. 一.什么是算法 算法(英文algorithm)这个词在中文里面博大精深,表示算账的方法,也可以表示运筹帷幄的计谋等.在计算机科技里,它表示什么 ...

  4. hexo部署在码云中 无样式问题

    在本地localhost:4000 运行如下 上传码云之后打开Gitee Pages服务 如下 同时控制台打印 解决方法 找到根目录下的_config.yml中的url 和 root # url: h ...

  5. SpringBoot事件监听机制源码分析(上) SpringBoot源码(九)

    SpringBoot中文注释项目Github地址: https://github.com/yuanmabiji/spring-boot-2.1.0.RELEASE 本篇接 SpringApplicat ...

  6. Python 变量详解[学习 Python 必备基础知识][看此一篇就够了]

    您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 目录 ...

  7. C# 基础知识系列- 11 委托和事件

    0. 前言 事件和委托是C#中的高级特性,也是C#中很有意思的一部分.出现事件的地方,必然有委托出现:而委托则不一定会有事件出现.那为什么会出现这样的关系呢?这就需要从事件和委托的定义出发,了解其中的 ...

  8. GraphicsLab Project 之 Curl Noise

    作者:i_dovelemon 日期:2020-04-25 主题:Perlin Noise, Curl Noise, Finite Difference Method 引言 最近在研究流体效果相关的模拟 ...

  9. shll脚本常用格式和规则使用

    shll脚本格式和规则 脚本文件必须已 .sh 结尾(yuan.sh) 脚本第一行必须是:#!/bin/bash 激活脚本的二种方式(sh yuan.sh)(给脚本X权限,以绝对路径执行脚本) 逻辑与 ...

  10. tp5.1 模型 where多条件查询 like 查询

    来源:https://blog.csdn.net/qq_41241684/article/details/87866416 所以我改成这样: $paperTypeModel = new PaperTy ...