Kruskal重构树

陌路散爱 提交于 2019-12-03 15:53:00

构造方法

按照Kruskal的传统步骤,先排序,按顺序枚举两个非连通块,合并后, 建一个点权为两点之间边权的父节点 。这样建出来的一棵树称为Kruskal重构树。
e.g. 假设原图(盗的)长这样:


建成树后就是这样(蓝色实线为最小生成树):

用途

克鲁斯卡尔重构树可以维护诸如“查询从某个点出发经过边权不超过w的边最远所能到达的节点”或“从某点到某点所有路径的最长(短)边的最小(大)值”(即最小(大)瓶颈路)之类的问题。
总之,算法处理范围有限,且多为同时包含“最大最小”、离线可二分的题目。
可与数据结构结合,以维护更复杂的数据结构。
支持在线,单次复杂度为\(O(\log n)\)

性质

按照上述方法建出来的树有一些非常好的性质。
1.树上除叶子结点以外的点都对应着原来生成树中的边,叶子结点就是原来生成树上的节点。
2.由于新点的创建顺序与原来生成树上边权的大小有关(从大到小),可以发现,从每个点到根节点上除叶子结点外按顺序访问到的点的点权是单调的。
3.出于Kruskal算法贪心的性质,两个点u和v的lca的点权就对应着它们最小生成树上的瓶颈。
4.实际上这棵树就是一个二叉堆。

例题

[简单]NOIp2013 货车运输
[较难]NOI2011 归程

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!