Boruvka 简介
Boruvka 是一种最小生成树算法,用于求解稠密图的 MST。
【典题】CF Xor-MST:
发现边数是 级别的,直接把 Kruskal 和 Prim ban 了,所以考虑使用 Boruvka 解决这个问题。
基本流程:
首先初始化每个连通块为自身,每次对于 找到满足题意的最小的边连到 并把两个连通块合并。直到只剩下一个连通块,也就是整个图联通。
正确性证明:不会。
分析一下代码实现:
我们用并查集维护集合关系,我们在每次循环开头判断当前连通块个数。
int cnt = 0;
F(i,1,n){
if(f[i]==i){
bl[i] = cnt+1; cnt++;
to[cnt]=val[cnt]=-1;
}
}
if(cnt==1) break;
一般的,我们把 to[x]
和 val[x]
记为从 x
这个连通块出发能到达的满足条件的最优点和边权。
当然你也可以写成 cnt
在外面统计的形式,只不过这样写对于后面每个块处理有点麻烦,所以我不这么写。
我们考虑一下本题,怎么找“最优边”?异或最小,显然想到使用 01-Trie 维护,但是我们需要写的是支持删除的 01-Trie 所以需要额外记录 。
复杂度是 Boruvka 的本身 乘上你需要额外支持快速查询最小边的数据结构的复杂度,在本题中为 , 为值域。
总复杂度 常数也较大,注意卡常。
只有一道例题的原因是我只会这一道,以前做过一道模版可惜找不到了,另外的题要么是可以用普通的 MST 算法过,要么是太抽象或太难的应用,笔者太菜不会。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App