zoukankan      html  css  js  c++  java
  • [HNOI2010]CITY 城市建设

    问题:

    给一张图,支持边长度修改,求MST

    题解:

    自己想就想不到了。。

    考虑cdq分治

    1.首先求出一定有用的边

    对于未处理的边,全部设为-INF,求一次MST,出现在MST上的边一定最终出现在后面的MST上

    2.然后求出一定无用的边

    对于未处理的边,全部设为INF,求一次MST,不在MST上的边一定不会出现在后面的MST上

    这两点非常好证明

    然后来观察一下时间复杂度

    对于1,求出了一定有用的边,那至少有n-[区间长度]条(因为至少有n-1条边)

    我们把它们缩点,这样之后,点数就保证和区间长度同一个数量级

    对于2,求出了一定无用的边,那至少有n-[区间长度]条(因为点数是[区间长度],有用的只有[区间长度],所以2有用是建立在1的基础上的)

    这样会发现,每个区间点数和边数都是和区间长度基本一致的

    然后是代码实现

    我们要维护连通性用到了并查集

    发现这个并查集是要支持撤销的,也就是让他的父亲等于0

    显然是用启发式合并的并查集

    f(n)=f(n/2)+logn 复杂度nlognlogn

  • 相关阅读:
    HGE tutorial04
    HGE tutorial03
    HGE tutorial02 plus
    HGE tutorial02
    C 语言实例
    C 语言实例
    C 语言实例
    C 语言实例
    C 语言实例
    C 语言实例
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/8882917.html
Copyright © 2011-2022 走看看