Kruskal重构树

建树

模仿kruskal的过程,先将边权排序

依次遍历每条边
若该边连接的两个节点u和v不在一个并查集内
新建一个结点node
该点点权为这条边的边权

找到u,v所在并查集的根 f u fu fu, f v fv fv

连边 ( n o d e , f u ) (n o d e , fu ) (node,fu) ( n o d e , f v ) ( n o d e , fv) (node,fv)

并更新并查集 f a [ f u ] = n o d e f a [ fu ] = n o d e fa[fu]=node , f a [ f v ] = n o d e fa[fv]=node fa[fv]=node

遍历完原图所有边后
我们建出来的必定是一棵树
也就是我们要的kruskal重构树

注意这棵树是以最后新建的结点为根的有根树
若原图不连通,即建出的是一个森林
那么就遍历每个节点,找到其并查集的根作为其所在树的根

性质

1.是一个小/大根堆 /
每个点对应子树里都是边长小于等于(/大于等于)它的点权的联通块 (由建树时边权的排序方式决定)

应用:求从u出发只经过边权不超过x的边能到达的结点

我们只要在求出边权升序排序的kuaskal重构树
找到树上深度最小的,点权不超过x的结点(一般用树上倍增)
那么它子树内的所有节点就是上述所求

2.LCA(u,v) 的权值是 原图 u到v路径上最大/小边权的最小/大值(由建树时边权的排序方式决定)

3.重构树中代表原树中的点的节点全是叶子节点其余节点都代表了一条边的边权

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值