Kruskal 重构树
这玩意可以解决什么问题呢?
多次询问 最小生成树中(两点)最长边 或 最大生成树(两点)最短边。
构造(以最小生成树为例):
-
将原图的所有边按边权排序。
-
每次最小的一条边,如果条边相连的两个点在同一个集合中,那么就跳过,否则就将这两个点的祖先都连到一个虚点上去,让这个虚点的点权等于这条边的边权
性质:
-
原点一定在重构树上为叶子节点
-
重构树上的虚点的权值从上到下单调
-
两点之间的最大边权就是两点的 LCA
例题:
多次询问 最小生成树中(两点)最长边 或 最大生成树(两点)最短边。
将原图的所有边按边权排序。
每次最小的一条边,如果条边相连的两个点在同一个集合中,那么就跳过,否则就将这两个点的祖先都连到一个虚点上去,让这个虚点的点权等于这条边的边权
原点一定在重构树上为叶子节点
重构树上的虚点的权值从上到下单调
两点之间的最大边权就是两点的 LCA
例题: