链接:http://uoj.ac/problem/84

  20分算法:萌萌的小爆搜,别搜进环里就行。

  50分:我们考虑一下最优决策是什么样的。看似很显然的一点就是我们先让本体在原地不动,让分身去遍历子树,然后在只剩一个儿子和一个不属于这个儿子的子树的叶子的时候一个去儿子一个去叶子。显然这个叶子应该是最深的那个叶子看起来好像并没有什么毛病,然而我们会发现他会被样例3hack,因为我们可以考虑这种情况:假如有两根很长很长的筷子,我们把用于吃饭的那一头粘起来并作为根结点。那么答案显然是一根筷子的长度。但是如果这两根筷子是劣质一次性筷子,在两根筷子的侧边长了一点点毛刺,这些毛刺比较靠近吃饭的那一端。那么我们明显应该先去遍历“毛刺”再遍历筷子的主干部分。所以我们考虑这么决策:我们假设本体一直不动,分身负责跑路。那么在我们遍历整棵树的过程中主体一定是走走停停,我们设主体停下来去让分身跑路的点为关键点。那么我们可以这么决策,我们到达一个关键点之后我们让分身遍历除了下一个关键点子树内的叶子节点和一个不属于包含这个关键点的儿子的最深的叶子节点以外的所有叶子节点。然后分身和主体一个去叶子一个前往下一个关键点。我们设f[x]为从根节点开始便利除x子树以外所有节点的的最短时间,deep[x]为x的深度(deep[1]=0),sm[x]为x子树内所有叶子节点的深度和,size[x]为x子树内叶子节点的个数。dmx[x][y](x为y的祖先)为x到y的父亲这条路径上往外深处去的最深的叶子节点的深度。那么转移方程为:f[x]=min(f[pa]+sm[pa]-sm[x]-(size[pa]-size[x])*deep[pa]+max(0,deep[x]-dmx[pa][x]))。pa为x的祖先。所以我们就可以n^2DP拿到50分了。sm[pa]-sm[x]-(size[pa]-size[x])*deep[pa]为遍历这些叶子节点比f[pa]要多增加的时间,max(0,deep[x]-dmx[pa][x])为从pa走到x的时间-去最后遍历的那个最深的叶子节点的时间。

  100分:我们仔细观察会发现,当x的父亲fa[x]只有x这一个儿子的时候f[x]也可以由f[fa[x]]+1转移过来,原因显然。再仔细观察一下转移式,会发现他实际就是在枚举从哪里开始往外走最长的叶子,max(0,deep[x]-dmx[pa][x])==0当且仅当deep[x]<=dmx[pa][x],那么我们其实只从dmx[pa][x]>=deep[x]且深度最大的pa转移过来就好了。因此,我们可以维护一个dmx[pa][x]单调递减的栈,每次我们在栈里面二分就可以了。虽说复杂度是nlog sqrt(n)的,(栈内的元素个数据说最多是O(sqrt(n)))级别,但是常数非常优秀,可以跑过一些O(n)的算法。但是如果打的丑一点的话会被卡内存。

  100分(2.0):我们可以利用一种最长链剖分进行弹栈,做到O(n),大概做法就是我们称最深叶子节点最深的儿子为重儿子,显然,当前节点对于重儿子所造成的dmx为当前节点第二深的叶子节点的深度,其余儿子为第一深的叶子节点深度。那么我们可以先dfs重儿子,暴力弹栈,然后再dfs轻儿子,依旧暴力弹栈。我们可以发现这么dp我们每个不在最“重”的那条链上的点一定能找到一个dmx[pa][x]>=deep[x]的点,稍微算一下即可证明合法性和时间复杂度。

nlogn
n

【UR #7】水题走四方 题解的更多相关文章

  1. 【UR #7】水题走四方

    题目描述 今天是世界水日,著名的水题资源专家蝈蝈大臣发起了水题走四方活动,向全世界发放成千上万的水题. 蝈蝈大臣是家里蹲大学的教授,当然不愿意出门发水题啦!所以他委托他的助手欧姆来发. 助手欧姆最近做 ...

  2. 【省选水题集Day1】一起来AK水题吧! 题解(更新到B)

    题目:http://www.cnblogs.com/ljc20020730/p/6937936.html 水题A:[AHOI2001]质数和分解 安徽省选OI原题!简单Dp. 一看就是完全背包求方案数 ...

  3. 【UOJ#82】【UR #7】水题生成器(贪心)

    [UOJ#82][UR #7]水题生成器(贪心) 题面 UOJ 题解 把\(n!\)的所有约数搜出来,这个个数不会很多. 然后从大往小能选则选就好了. #include<iostream> ...

  4. World Finals 2017 (水题题解)

    看大佬做2017-WF,我这种菜鸡,只能刷刷水题,勉强维持生活. 赛后补补水题. 题目pdf链接,中文的,tls翻译的,链接在这里 个人喜欢在vjudge上面刷题. E Need for Speed ...

  5. #82. 【UR #7】水题生成器

    链接:http://uoj.ac/problem/82 今天是世界水日,著名的水题资源专家蝈蝈大臣向世界宣布了他的一项新发明 —— 水题生成器. 每道题目都有一个正整数的难度值.水题生成器虽然强大但是 ...

  6. PAT甲题题解-1011. World Cup Betting (20)-误导人的水题。。。

    题目不严谨啊啊啊啊式子算出来结果是37.975样例输出的是37.98我以为是四舍五入的啊啊啊,所以最后输出的是sum+0.005结果告诉我全部错误啊结果直接保留两位小数就可以了啊啊啊啊 水题也不要这么 ...

  7. PAT甲题题解-1012. The Best Rank (25)-排序水题

    排序,水题因为最后如果一个学生最好的排名有一样的,输出的课程有个优先级A>C>M>E那么按这个优先级顺序进行排序每次排序前先求当前课程的排名然后再与目前最好的排名比较.更新 至于查询 ...

  8. PAT甲题题解-1019. General Palindromic Number (20)-又是水题一枚

    n转化为b进制的格式,问你该格式是否为回文数字(即正着写和倒着写一样)输出Yes或者No并且输出该格式又是水题... #include <iostream> #include <cs ...

  9. PAT甲题题解-1041. Be Unique (20)-水题

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789189.html特别不喜欢那些随便转载别人的原创文章又不给 ...

随机推荐

  1. Codejock.Xtreme.Toolkit.Pro.v15.3.1 下载 与 VS2015补丁使用方法

    Codejock.Xtreme.Toolkit.Pro.v15.3.1 下载 与 VS2015补丁使用方法 打算放在CSDN进行下载的,上传完成后发现资源分设置的1分,本打算赚点下载分的.在页面上没有 ...

  2. vs2010 编译release没问题debug编译不通过

    ------ 已启动全部重新生成: 项目: VM661JTcpDLL, 配置: Debug Win32 ------生成启动时间为 2018-12-29 14:07:20.项目文件包含 ToolsVe ...

  3. WPF使用WindowChrome实现自定义标题框功能

    代码: <Window x:Class="WpfDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx ...

  4. storm(二)消息的可靠处理

    storm 通过 trident保证了对消息提供不同的级别.beast effort,at least once, exactly once. 一个tuple 从spout流出,可能会导致大量的tup ...

  5. fastjson 出现首字母小写的问题

    今天工作使用fastjson要求传过去的参数全为大写,在使用的过程中发现它自动将我的字段首字母转为小写了,在网上查了一些资料,发现下面的这个挺好,比其他的要方便. package com.alibab ...

  6. extjs grid 复选框选择事件

    开发中需求是统计选择的行数,所以要监控checkbox的选择事件包括表头的全选事件 遇到的问题就不赘述了 方案是监控grid的复选框和行加载时绑定事件 baseView: DBEN.controls. ...

  7. QSocket 总体设计框架说明(观赏)

    QSocket 是 QDAC 开源组件的一个重要的组成部分,终于要开始开工了,为了方便大家了解 QSocket,对 QSocket 的总体设计的一些想法,我在这里给大家简要的描述一下. 首先,QSoc ...

  8. 关于Git GUI的使用方式

    1.选择Clone Existing Repository 2.选择clone地址和存放位置,然后clone 3失败 4如果失败,让对方去这里(github的界面)邀请下,如果是自己就不用 5然后等待 ...

  9. IIS7上传4M文件以上文件出现“Post大小超出允许的限制”错误解决方法

    在web.config文件中的system.web节点中添加如下这句,即40M <system.web> <httpRuntime maxRequestLength = " ...

  10. Markdown教程 <1>

    Markdown教程 <1> 本文在本地使用atom编辑后,直接将代码赋值到博客园中的markdown编辑器中生成 1. markdown字体,段落控制 以下引用块里面为源码,引用块下方为 ...