zoukankan      html  css  js  c++  java
  • 旅行者

    根据套路进行分治。

    把最大的边切开,变成(l,md),(md+1,r),处理过中线的询问,接着继续递归。

    处理的方法是对于每一个节点跑最短路,用中线(s->md)+(md->t)更新答案。

    这样子一次询问时间复杂度是中线长度。由于每次选择较长的边切开,所以询问的时间复杂度不会超过sqrt(n*m)。

    网上neither_nor的证明是错的。因为长边/2以后不一定会变为短边。

    这道题要用主定理证明时间复杂度。

    设x为短边长度,y为长边长度,则x^2*y*log(xy)就为每次最短路时间复杂度。

    由于x<=y,所以x<=sqrt(n)
    x^2*y*log(xy)<=ssqrt(s)*log(xy)

    递归式是$O(s)=2O(frac{s}{2})+ssqrt{s}log_2(s)$

    直接套用主定理。在此题中a=b=2,log_b a=1
    由于f(s)>=Ω(s^{1.5})

    所以时间复杂度就是$O(s sqrt{s}log_2s)$

  • 相关阅读:
    今日SGU 5.27
    今日SGU 5.26
    今日SGU 5.25
    软件工程总结作业
    个人作业——软件产品案例分析
    个人技术博客(α)
    结对作业二
    软工实践 二
    软工实践 一
    《面向对象程序设计》六 GUI
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/12975442.html
Copyright © 2011-2022 走看看