先抄点本子上的基本概念(有改动,仅供参考)

1.生成树定义:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

在一个有v个点的无向连通图中,取其中v-1条边,并使所有顶点联通,所得到的子图称为原图的一颗生成树。

ps:如果以v-1条边连接v个顶点,那么总可以将图分为如此的子图

最小生成树学习笔记(持续更新) 随笔 第1张

然而这样的 点边集合 所构成的联通图,一定是没有回路的(除非再来一条边),所以生成的一定是一颗tree

(然而是定理,不用说)

2.最小生成树:

  在一个带权的无向连通图中,各边权和最小的一颗生成树即为原图的最小生成树。(duang~duang~定义~)

3.最小边原理:

  图中权值最小的边,(如果唯一),一定在最小生成树上。

(瞎掰start)

在生成树中,每个点都通过唯一的一条边连接到 生成树 上,

生成树是原联通图的一个子图,所以如果将一个点与最小生成树的连接断开,

能将该点与最小生成树连接的边的数量   一定   >=1,为了使生成树是最小生成树,

选择将该点与最小生成树连接的边一定是最小的,

然而对于每个点,以上瞎掰内容都是适用的,此连通图的边的集合中的边也一定都在

刚才提到的“选择对象”中,所以图中权值最小的边(如果唯一),一定在最小生成树上。

(瞎掰end)

(仅供参考,不保证正确,也不严谨)

5.对于一个图G,如果图中边权值都不相同,则图的最小生成树是唯一的,反之不然。

Prim最小生成树算法

本子上说,prim是贪心算法

它的思想如下:

任意时刻的连边状态都是一棵树,从某一点开始,每次都花最小的代价,用一条边加进一个新的点。

那么最小代价如何确定呢?按照本子上的算法流程,是用 已进入最小生成树的点未进入最小生成树

的点 之间的边权来更新最小代价。

道理我们都懂,下面主要谈prim的堆优化

 

本子上给出的prim例子,复杂度是O(n^2),本子告诉我

求最小值(min值)的过程可以用堆来优化

代码不鸽了

这份代码在这道题(https://www.luogu.org/problemnew/show/P3366)中是比kruskal快的

最小生成树学习笔记(持续更新) 随笔 第2张

最小生成树学习笔记(持续更新) 随笔 第3张

 

 

继续鸽

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄