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)$

  • 相关阅读:
    CSP2019题解
    [NOI2019]弹跳(KD-Tree)
    集合框架面试题
    注解
    WiFi攻防
    简单完整讲述Servlet生命周期
    Java多线程
    Java--面向对象讲解
    layUi
    java提高篇(三)-----理解java的三大特性之多态
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/12975442.html
Copyright © 2011-2022 走看看