检测到 KaTeX 加载失败,可能会导致文中的数学公式无法正常渲染。
在 OI 中常用的最小生成树算法有 朴素版 Prim 算法 和 Kruskal 算法 。
#朴素版 Prim 算法
Prim 算法是一种常见且好写的最小生成树算法。
朴素版 Prim 算法的基本思想是从一个结点开始不断加点,其时间复杂度约为 ,适用于稠密图。
#思路
朴素版的 Prim 算法思想与我在 最短路学习笔记 一文中提到的朴素版 Dijkstra 算法很相似。
大体步骤如下:
- 初始化一个
dist
数组,使所有距离均为 。
设集合 表示已经在连通块内的所有点。 - 进行 次迭代:
- 找到集合外 中的距离最近的点,将其赋值给 。
- 用 更新其他点到 集合 的距离。
- 将 添加到集合 中。
#代码
题目: P3366 【模板】最小生成树
1 |
|
#Kruskal 算法
时间复杂度约为 ,适用于稀疏图。
#思路
- 先将所有边按照权重从小到大排序。
- 枚举每条边 ,如果 不连通,将这条边加入集合 。
注:可以使用并查集维护联通块。
#代码
题目: P3366 【模板】最小生成树
1 |
|
#参考资料
本文中 Prim 算法的演示图片原稿来自维基共享资源,原作者为 Alexander Drichel ,经本人整合后以 CC BY-SA 3.0 协议发布,初版可见 caf2ba8
@OI-wiki/OI-wiki,本文其余内容的版权协议见正文下方「版权声明」处。