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