kruskal重构树
kruskal重构树
kruskal生成树算法是利用贪心和并查集来找到一颗最小生成树,但是他可以求解的信息不止于MST
如果为每次取出的合法边新建一个结点,此结点的点权为边的边权,将整张图看作是点权图,就会得到一颗二叉树,而这颗二叉树满足任意一个如果有权值则有两子,否则为叶节点
最小生成树上两点的距离及重构树上两点的距离,且深度越浅的非叶节点权值越大。
由此可以得到一个性质,最小生成树中两点间的最长边权为两点LCA的权值
例题:http://lydsy.com/JudgeOnline/problem.php?id=3732
先建立一颗重构树,再在新图上跑倍增/树剖LCA即可
kruskal重构树可以代替一些树剖,复杂度更优秀,编码难度也更低