Kruskal
重构树可以用来解决一些关于图上能到达的点的问题。
Kruskal
重构树的建树过程和Kruskal
最小生成树类似,先把边排序,然后再依次合并,但是在每一次合并的时候,都要新建节点,然后将节点连向这两个集合的根节点,点权就是图上连接这两个集合的边权。
所以我们可以看出,叶子节点一定是图上原有的节点。
Kruskal
重构树还有个性质,假设你按照边权从小到大排序,那么树上任意两个叶节点的LCA
的点权必是图上最小生成树中这两个节点之间的最大边权。
Kruskal
重构树的建树过程代码:
1 | num = n; |
需要注意一点的就是,Kruskal
重构树不一定只能在一般图上做,如果有需要,也可以在树上做。