(本文章同步于洛谷博客)
写这篇博客主要是因为oi-wiki上写得太精简了……我对着这几段话弄了一晚上才搞明白/kk,因此决定根据自己的理解写一篇详尽的 kruskal 重构树的学习笔记,可以配合 oi-wiki 食用。
前置知识:最小生成树,与 kruskal 算法
kruskal重构树的构造
在进行 kruskal 算法时,我们会将当前边的两个端点 x x x 和 y y y 所在的树合并成一棵,即连一条由 x x x 的树根指向 y y y 的树根的边,写成代码就是f[xx]=yy
(假设 x x xx xx 和 y y yy yy 分别为 x x x 和 y y y 对应的根结点)。而 kruskal 重构树则是在合并时引入一个新的结点 n o d nod nod,用 n o d nod nod 作为 x x xx xx 和 y y yy yy 的父亲,即f[xx]=nod,f[yy]=nod
,同时将 x x