回顾
上期我们学习了并查集的基础(链接)。
二、并查集的应用——生成最小树
在含有n个顶点的连通网中选择n-1条边,构成一颗极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连同图的最小生成树。例如,对于如右图所示的连通图可以有多颗权值总和不相同的生成树。
应用场景
例如:要在n个城市之间建设道路,主要目标是要使这n个城市的任意两个之间都可以同行,但建设道路的费用很高,且各个城市之间建设道路的费用不同,因此另一个目标是要使建设道路的总费用最低。这就需要找到带权的最小生成树。
Kruskal算法
基本思想:
按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路。
基本做法:
首先构造一个只含n个顶点的森林,然后依权值从小到大从连同网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止。