题意

  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. 第四章 信息收集之nmap

    @nmap扫描工具 nmap是使用最广泛的扫描工具,主要的使用范围有,嗅探,扫描,ping. 局域网扫描 nmap扫描的基本命令: 首先在桌面右键选择open in terminal进入命令窗口,输入 ...

  2. hadoop第一个程序WordCount

    hadoop第一个程序WordCount package test; import org.apache.hadoop.mapreduce.Job; import java.io.IOExceptio ...

  3. Django-DRF(1)

    一. WEB应用模式 在开发Web应用中,有两种应用模式: 1. 前后端不分离 2. 前后端分离 二. API接口 为了在团队内部形成共识.防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的 ...

  4. 【CodeForces - 707B】Bakery(思维水题)

    Bakery Descriptions 玛莎想在从1到n的n个城市中开一家自己的面包店,在其中一个城市烘焙松饼. 为了在她的面包房烘焙松饼,玛莎需要从一些储存的地方建立面粉供应.只有k个仓库,位于不同 ...

  5. go爬虫系列

    一.go语言爬取豆瓣电影top250 package main import ( "net/http" "io/ioutil" "os" & ...

  6. prometheus 监控 jar应用服务 + 修改监听IP和端口

    1.修改服务的启动脚本 [root@do1cloud01 init.d]# vim learn-school nohup ${JAVA_HOME}/bin/java -javaagent:/usr/l ...

  7. 2019年 Java 课程总结

    Java学习个人感悟: 1.我感觉学习java应该是循环渐进,有始有终,勤奋细心,脚踏实地. java是一门有着阶梯性的一们语言,如果要学习它.我觉得最好还是按照java的学习体系,先学习什么,在学习 ...

  8. [bzoj3193][JLOI2013]地形生成_排列组合_贪心

    [JLOI2013]地形生成 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3193 题解: 这种求总排列的题,一种常规做法就是所有的元素 ...

  9. ABC044 Digit Sum

    题目链接 我的思路略复杂,这里介绍一个比较简洁的做法. 对于 $b \le \sqrt{N}$,暴力枚举 $b$.对于 $b > \sqrt{N}$, 注意到在 $b$ 进制下 $N$ 至多有 ...

  10. python的异常处理机制

    异常机制己经成为衡量一门编程语言是否成熟的标准之一,使用异常处理机制的 Python 程序有更好的容错性,更加健壮. 对于计算机程序而言,情况就更复杂了一一没有人能保证自己写的程序永远不会出辛苦!就算 ...