博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HNOI2010]CITY 城市建设
阅读量:5303 次
发布时间:2019-06-14

本文共 500 字,大约阅读时间需要 1 分钟。

问题:

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

转载于:https://www.cnblogs.com/yinwuxiao/p/8882917.html

你可能感兴趣的文章
JZOJ-TG817-A-solution
查看>>
Solution: [P5021 赛道修建](https://www.luogu.org/problem/P5021)
查看>>
解题报告标准
查看>>
网络流定理总结
查看>>
JZOJ-TGB817-SOL
查看>>
AT1983 BBQ Hard 解题报告
查看>>
AT2000 Leftmost Ball 解题报告
查看>>
JZOJPJ-C 8/21题解
查看>>
JZOJ823PJ-C, TG-B
查看>>
Empty
查看>>
LINUX - 寄存器和堆栈
查看>>
LINUX - mmap()
查看>>
LINUX - 随机数
查看>>
JAVA - 方法
查看>>
C - dlopen dlsym
查看>>
LINUX - socket
查看>>
LINUX - 最简单的CS通信实例
查看>>
GO - 高级编程
查看>>
LINUX - Libevent
查看>>
display:table实现多列等高布局
查看>>