Kruskal 重构树
前言
做题,遇到这个东西不会,来学一下
构建过程
现在有一个 个点的无向图,求出它的最大生成树(也可以是最小生成树,若是最小生成树,则将后文的所有大小关系反转,性质依然成立)后,可以用如下方式得到它的 Kruskal 重构树:
- 从大到小枚举树边;
- 维护一个并查集,设这条树边为 , 在并查集中的祖先分别为 ,则新建一个点 ,连接 和 两条边,并使 的点权为 ,在并查集中将 的祖先设为 。
性质 / 用途
-
性质 1:建出的重构树符合二叉小根堆的性质,即每个点的点权均小于等于其儿子的点权。
-
性质 2:点对 在原图中所有路径中,边权最小值最大的路径上的最小值 最大生成树上, 两点路径上最小的边权 Kruskal 重构树上 的点权。
- 第一个等号显然。第二个等号,考虑加边过程,每次加边新建的虚点都联通了两个点集,而加入 lca 时便联通了 和 所在的点集,故使 lca 加入时的那条边一定在 到 的路径上。而由性质 1 得,lca 的点权最小,且不存在另一条在路径上且边权小于 lca 点权的边,即这条边是 到 路径上边权最小的边。
-
性质 3:由性质 2,对于给定的点 和常数 ,设集合 ,其中 代表 在最大生成树上的路径上最小的边权,则所有 中的点的 lca 为 的所有祖先中深度最小的点权 的点。
应用
个人理解,Kruskal 重构树可以用来解决一系列与图上边权 或 的子图联通性问题。
例题
-
P1967 [NOIP2013 提高组] 货车运输
- 板子,知道性质 2 就可以解题。
-
P4768 [NOI2018] 归程
- 板子,知道性质 3 就可以解题。
-
P7834 [ONTAK2010] Peaks 加强版
- 板子,知道性质 3 并掌握主席树就可以解题。
-
P4899 [IOI2018] werewolf 狼人
- 比较简单的应用,进行一点点转化后知道性质 3,会做二维数点就可以解题。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Misaka's Blog!
评论
re