Kruskal重构树

前言

Kruskal\tt KruskalKruskal重构数,吼啊!
作者在血淋淋的经历中知道了一个道理,没有人能保证自己做出所有黄题。
当然这和此文章无关。

正文

Kruskal\tt KruskalKruskal 重构树,顾名思义,重构 Kruskal\tt KruskalKruskal 算法求出的最小生成树,比如我们有原图:
在这里插入图片描述
那么轻易可得出在 Kruskal\tt KruskalKruskal 算法下的最小生成树(因为 Prim\tt PrimPrim 算法和 Kruskal\tt KruskalKruskal 算法下的最小生成树有可能是不同的!):
在这里插入图片描述
此时呢,我们根据边权按照 从小到大 的顺序,以边权作为权值建立新节点,以原边连接的左右两点作为左右儿子,看不懂?那我们来试一下!首先是第一次选择,可以发现目前边权最小值是 111,所以我们选择 (3,2)(3,2)(3,2) 这对点:
在这里插入图片描述
注意 P(1)\tt{P}(1)P(1)111 为权值的点,此时我们继续进行,可以发现目前的最小权值还是 111 且对应两点为 (2,5)(2,5)(2,5) 此时问题来了,两点有重合点 222 那该怎么办?简单,我们只需要把新建的节点作为 (P)(1)\tt(P)(1)(P)(1) 的父亲即可,于是就有了:
在这里插入图片描述
以这种方法一直下去,就可以得到最后的重构树:

在这里插入图片描述
此时,聪明的孩子就会说,这个东西有什么用啊,好问题,这玩意用处巨大!他有一个牛逼的性质:

  • 图上任意两点 x,yx,yx,y 之间经过边的权值的最小值 === Kruskal\tt KruskalKruskal 最小生成树上的 x,yx,yx,y 路径上的最小值 === Kruskal\tt KruskalKruskal 重构树上 lca(x,y)\tt{lca}(x,y)lca(x,y)
  • 最大值同理。

这个性质给我们做题带来了巨大便利!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值