问题:

给一张图,支持边长度修改,求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

相关文章:

  • 2021-10-22
  • 2022-02-25
  • 2021-10-17
  • 2022-12-23
  • 2021-08-16
  • 2022-12-23
  • 2022-01-13
  • 2021-06-21
猜你喜欢
  • 2021-11-30
  • 2022-02-21
  • 2021-11-28
  • 2021-05-31
  • 2022-12-23
  • 2022-01-13
  • 2021-10-01
相关资源
相似解决方案