链接: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. PostMessage和SendMessage有什么区别?(有EnumChildWindowsProc的例子)

    PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回,继续执行.PostMessage的返回值表示PostMes ...

  2. Android基础开发入门(一)

    前言:我学了一年多的C#(从学编程算起,也没有两年,我现在大二下),中间也一直在学WP开发,虽然技术不咋地,很渣渣,但微软在Build大会上宣布的策略让我觉得有必要学习一下安卓开发了.关于微软的策略, ...

  3. SQL Server 2017 SELECT…INTO 创建的新表指定到文件组

    原文:SQL Server 2017 SELECT-INTO 创建的新表指定到文件组 SELECT-INTO 在 SQL Server 中也是常见的一个功能,过去用此方法创建的新表只能存储到默认的文件 ...

  4. Android零碎知识之Style and Theme

    Android的styles资源文件中存在了我们在应用中定义的各种style,它们都是以style开始的元素,包含许多属性的集合.但我们一般般它们分为style和theme,那它们有什么区别呢? 一. ...

  5. Qt-vs-addin失效的问题

    Qt-vs-addin的小问题 使用Visual Studio进行Qt开发的时候,需要安装一个插件.然而有时候这个插件的一些工具却莫名其妙的失效: 其中qt5appwrapper.exe用于编辑Qt工 ...

  6. Hadoop分布式文件系统

    在一个经典的数据架构中,Hadoop是处理复杂数据流的核心.数据从各种系统中收集而来,并汇总导入到Hadoop分布式文件系统HDFS中,然后通过MapReduce或者其它基于MapReduce封装的语 ...

  7. c# 获取cook

    using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServi ...

  8. client,offset,scroll系列

    client(客户端),offset(偏移),scroll(滚动)1.client系列 clientTop 内容区域到边框顶部的距离 ,说白了,就是边框的高度 clientLeft 内容区域到边框左部 ...

  9. shell多线程(3)while循环

    start="2018-06-17" end="2018-07-01" min=`date -d "${start}" +%Y%m%d` m ...

  10. 宜信开源|数据库审核软件Themis的规则解析与部署攻略

    一.介绍 Themis是宜信公司DBA团队开发的一款数据库审核产品,可帮助DBA.开发人员快速发现数据库质量问题,提升工作效率.其名称源自希腊神话中的正义与法律女神.项目取此名称,寓意此平台对数据库质 ...