最小生成树的Boruvka算法

偶然得知了居然还有这种神奇的算法,qwq。

老年选手觉得很有意思,所以颓废地学了一下……

简单来说,它就是一个多路增广的Kruskal。

Kruskal为什么是对的它就为什么是对的

它的流程是这样的:

1.对于每个连通块,找到一条由它内部的点连向其它连通块的最小边。

2.把这些最小边加入进去。(注意加入的时候要判它是不是连接了两个不同连通块)

3.如果已经放进去了n-1条边则退出,不然则继续。

 

根据启发式合并的思想,显然它只要做O(log n)次。每次加边的复杂度是O(m),

合并的复杂度是O(n),那么总复杂度就是O((m+n) log n)。

 

然而它好像比Kruskal不知道麻烦到哪里去了。聪明的读者纷纷表示:要它有什么用???

……

shivering太弱了,所以也不知道欸。于是询问了教我这个算法的巨佬,巨佬表示:可以拿来出题啊!出好多好多题啊!

……orz,orz。反正orz就完事了……

 

显然不是出最小生成树裸题用的。

我们发现,它唯一的难点在于如何给每个连通块找到它连出去的最小边。

暴力是O(m),但我们会发现,有许许多多的题目,边的数目非常大,而边权又有某种规律。

这时候,就可以套上各种各样的数据结构/dp/分治来维护它了。

采用Boruvka以后,基本就变成了另一道全新的题,爱出什么出什么。

仔细思考,prim直接n^2,Kruskal初始就

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值