题意

  http://uoj.ac/problem/184

题解

  大概是神题。

  网格图上跑最短路有一个经典的优化方式:分治分组跑最短路。
  对于这道题,设矩形长为 \(n\),宽为 \(m\),则对 \(n,m\) 中更大的一个二分。
  这里只考虑按 \(n\) 分治的情况。

  如上图,设 \(S=nm\),因为此时一列的点数是小等于 \(\sqrt{S}\) 的,所以我们可以枚举红色分割线上的点,以每个点为原点,跑到矩形中所有点的最短路。
  然后考虑询问:
    如果询问的两点在分割线的不同侧(或者至少有一端在分割线上),则最短路一定经过分割线,用分割线上的每个点到这两个点的最短距离之和更新答案,然后这个询问就不用管了。
    如果询问的两点在分割线的同一侧,则最短路可能经过分割线,依然用分割线上的每个点到这两个点的最短距离之和更新答案,然后把这个询问扔到左/右递归区间,去寻找不经过分割线的最短路。
    当然,有可能存在分割线上一点 到询问两端的最短路存在部分重合的情况。对于不同侧的情况,画图可知这种情况会被分割线上其它点 用更短路径覆盖掉;对于同一侧的情况,这种情况会被不经过分割线的更短路径覆盖掉。

  时间复杂度 \(O(S\sqrt{S}\log^2{S})\)。嗯,码吧……
  ……
  等等,你他吗说什么?这复杂度什么破玩意??跟 \(O(S^2)\) 有啥区别??你让我 \(2s\) 跑带大常数的 \(4e8\)???如果 cpu 是 I9 的说不定真能跑过
  其实刚才这个复杂度是凭感觉意淫的,下面就是丧心病狂的算时间复杂度环节了

  首先有 \[\begin{align} T(S)&=2T(\frac{S}{2})+O(S\sqrt{S}\log S) \nonumber \\ &= T(S)=2T(\frac{S}{2})+O(S^{1.5}\log S) \nonumber \end{align}\]
  然后参考这篇博客的主定理(这里有简单版)
  假设我们有递归式 \(T(n)=aT(\frac{n}{b})+f(n)\),我们可以用主定理解这个递归式。
  其中 \(n\) 为问题的规模,\(a\) 为递归到下一层的子问题数量,\(\frac{n}{b}\) 为每个子问题的规模,\(f(n)\) 为递推后做的额外计算。
  本题中,\(a=b=2\),\(f(S)=O(S^{1.5}\log S)\)。

  • 1. 假设存在常数 \(\epsilon>0\),使得 \(f(n)=O(n^{\log_b(a)-\epsilon})\),则 \(T(n)=\Theta(n^{log_ba})\)
      \(\log_b a = \log_2 2 = 1\),则 \(S^{1-\epsilon}=S^{1.5}\log S\),显然 \(\epsilon<0\),故不符合主定理 1。

  • 2. 假设存在常数 \(k\ge 0\),使得 \(f(n)=\Theta (n^{\log _{b}a}\log ^{k}n)\),则 \(T(n)=\Theta(n^{log_ba}\log^{k+1}n)\)。
      \(S^{\log_b a}\log^k S = S\log^k S = S^{1.5}\log S\)
      即要求 \(log^{k-1} S = S^{0.5}\)
      参考具体数学第2版 p368 的渐进等级次序,可知 \(\log_x n\lt n^c\),其中 \(x\) 是任意 \(\gt 1\) 的底数,\(c\) 是任意 \(\gt 1\) 的指数,\(<\) 号重定义为函数的渐进增长率关系,即右边的函数更快到达无穷大。
      比如有 \(\log n\lt n^{0.0001}\),这可能是很多人都不敢相信的,因为我们通常将视野局限于 \(n\) 不够大的情况,这种情况下 \(\log n\) 的值当然远大于 \(n^{0.0001}\)。比如 \(n=10^{100}\),\(\log n=100\),\(n^{0.0001}≈1.0233\)。但如果我们把 \(n\) 取到 \(10^{10^{100}}\),\(\log n\) 就小于 \(n^{0.0001}\) 了。
      那把 \(\log_x n\) 取任意实数次幂,其增长速度是否还小于 \(n^c\) 呢?
      确实是的。我们观察渐进增长率关系的定义:\[ f(n)<g(n) \rightleftharpoons \lim_{n \to \infty} \frac{f(n)}{g(n)}=0\]
      显然对于任意实数 \(y\),都有 \(\frac{f(n)^y}{g(n)}=0\)。故二者的渐进增长率关系不变。
      (这其实算是高数内容了,有点超纲,了解一下就好)
      综上,\(log^{k-1} S = S^{0.5}\) 是不可能满足的,随着 \(S\) 的增长,二者的趋向无穷大的速度一定不同,只要 \(S\) 取得足够大,二者的取值就会不同。
      故不符合主定理 2。

  • 3. 假设存在常数 \(\epsilon >0\),有 \(f(n)=\Omega (n^{\log _{b}(a)+\epsilon })\),同时存在常数 \(c<1\) 以及充分大的 \(n\) 满足 \(af(\frac{n}{b})\le cf(n)\),那么 \(T\left(n\right)=\Theta \left(f\left(n\right)\right)\)。
      其实前两个主定理都不符合了,那肯定是用主定理 3 算复杂度了……
      本来想验证一下是否满足主定理 3 的,结果主定理 3 的那个 \(\Omega\) 我不会解啊 QvQ,哪位哥哥教教我

  于是套用主定理 3,算得 \(T\left(n\right) = \Theta \left(f\left(n\right)\right) = \Theta (S\sqrt{S}\log S)\)。
  所以时间复杂度是 \(\Theta (S\sqrt{S}\log S)\)(带不及 \(\log S\) 的小常数)……

  这题有一个弱化版,就是强制 \(n\le 10^5\),\(m\le 10\),这时由于递归式里不带 \(\sqrt{S}\),要套主定理 2 而不是主定理 3,所以解出来的时间复杂度是 \(\Theta (mS\log m\log {S})\)。这就是双 \(\log\) 复杂度说法的来源……

  code

【ZJOI 2016】旅行者的更多相关文章

  1. [BZOJ 4573][ZJOI 2016]大森林

    [LOJ 2092][BZOJ 4573][UOJ 195][ZJOI 2016]大森林 题意 给定一个树序列, 初始时所有树都只有一个点, 要求支持三种操作: 区间种树(在某个特定点上长出一个子结点 ...

  2. [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)

    [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...

  3. 【BZOJ 4456】【UOJ #184】【ZJOI 2016】旅行者

    http://www.lydsy.com/JudgeOnline/problem.php?id=4456 http://uoj.ac/problem/184 参考(抄)的晨爷的题解(代码) 对矩形进行 ...

  4. 【BZOJ 4455】【UOJ #185】【ZJOI 2016】小星星

    http://www.lydsy.com/JudgeOnline/problem.php?id=4455 http://uoj.ac/problem/185 有一个$O(n^n)$的暴力,放宽限制可以 ...

  5. [ZJOI 2016] 小星星

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 653  Solved: 400[Submit][Status] ...

  6. Solution -「ZJOI 2016」「洛谷 P3352」线段树

    \(\mathcal{Descrtiption}\)   给定 \(\{a_n\}\),现进行 \(m\) 次操作,每次操作随机一个区间 \([l,r]\),令其中元素全部变为区间最大值.对于每个 \ ...

  7. 【BZOJ4456】旅行者(最短路,分治)

    [BZOJ4456]旅行者(最短路,分治) 题面 BZOJ Description 小Y来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有n条从东到西的道路和m条从南到北 的道路,这些 ...

  8. Be Better:遇见更好的自己-2016年记

    其实并不能找到好的词语来形容过去的一年,感觉就如此平淡的过了!没有了毕业的稚气,看事情淡了,少了一丝浮躁,多了一分认真.2016也许就是那句话-多读书,多看报,少吃零食多睡觉,而我更愿意说--Be B ...

  9. Connect() 2016 大会的主题 ---微软大法好

    文章首发于微信公众号"dotnet跨平台",欢迎关注,可以扫页面左面的二维码. 今年 Connect 大会的主题是 Big possibilities. Bold technolo ...

随机推荐

  1. 【POJ - 1970】The Game(dfs)

    -->The Game 直接中文 Descriptions: 判断五子棋棋局是否有胜者,有的话输出胜者的棋子类型,并且输出五个棋子中最左上的棋子坐标:没有胜者输出0.棋盘是这样的,如图 Samp ...

  2. 《JAVA语言》课问题汇总

    一.阅读相应教材,或者使用互联网搜索引擎,弄清楚反码.补码跟原码这几个概念,然后编写示例程序,对正数.负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示 ...

  3. krpano下全屏后弹窗失效问题解决方法

    原因 krpano 自身的全屏仅全屏自身,以外的html效果将无法显示 解决方法 把全屏按钮换成浏览器自身的全屏效果 解决步骤 vtourskin.xml <layer name="n ...

  4. [转帖]SOCKS5代理与HTTP代理

    SOCKS5代理与HTTP代理 https://blog.csdn.net/watson2017/article/details/79897693 [1]什么是SOCKS5协议. SOCKS是一种网络 ...

  5. 百度后端C++电话一面

    Json.XML差异?说全点,能想到的所有差异.然后protobuf不小心被我提出来了,开始扯三个的差异....然后问优缺点.服务端客户端使用及接口更新的影响范围如何缩小 左值,右值区别 map用什么 ...

  6. 02docker核心概念

    1:docker三大核心概念 核心概念 描述 镜像 Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板. 容器 Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用 ...

  7. 17-Perl 目录操作

    1.Perl 目录操作以下列出了一些操作目录的标准函数:opendir DIRHANDLE, EXPR # 打开目录readdir DIRHANDLE # 读取目录rewinddir DIRHANDL ...

  8. linux 安装telnet、curl、ifconfig、vim、ping等工具

    1.首先执行下面命令更新相关源 apt-get update 2.安装telnet apt-get install telnet 3.安装curl apt-get install curl 4.安装i ...

  9. asp.net 6.aspx页面

    1.aspx页面的头部 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Us ...

  10. mvc验证码图片生成

    /// <summary> ///生成验证码 /// </summary> public class VerifyCode { /// <summary> /// ...