boruvka 算法学习笔记

1|0boruvka算法

就是最小生成树 B 算法。B 算法的思路是每次对每个连通块,求出它能连出去的权值最小的边,然后再按边权从小到大合并。由于每次操作连通块数至少减半,所以复杂度是 O(mlogn)

1|1CF1305G Kuroni and Antihype

题意:长为 n 的数列 a,现在要选择全部数,每一次你可以选择一个未被选择的数,也可以选择一个已经被选择了的数 ai,再选择一个满足 ai&aj=0 的未被选择的数 aj,得到 ai 的贡献,求选择所有数的贡献最大值。

思路:我们先加入点 n+1 权值为 0 来保证能选所有点,令 ans=ai,然后将 ai&aj=0 的点间连上 ai+aj 的边,然后求一个最大生成树即可。但是边数是 O(n2) 量级的,我们考虑利用这道题的性质进行优化。我们设 f[S][2] 表示边权是 S 的二进制下子集的最大/次大边权,这个可以用 DP 求出,然后对于 ai,根据 f[ai] 求出 i 所在集合能连出去的最大边权再加边即可。因此可以 O(wlogw) 拓展一轮,那么用上 B 算法就可以了。

复杂度 O(wlognlogw)

1|2Tree MST

题意:有一棵树,现在用这棵树生成一张完全图,图上两点间的距离是 wx+dis(x,y)+wy,求最小生成树。

思路:考虑用 boruvka 算法。我们每次需要对于一个点,求出这个点连向不在一个联通块的点的最小边,可以用一次换根 DP 求出。

具体的,维护 wx+disx 的最小值和不在一个联通块内的点的次小值就可以了。

复杂度 O(nlogn)


__EOF__

本文作者Xttttr
本文链接https://www.cnblogs.com/Xttttr/p/18014130.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Xttttr  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
历史上的今天:
2023-02-12 NOIP2022游记
2023-02-12 CF1167G题解
点击右上角即可分享
微信分享提示