构造方法
对于一棵树 T ,建立一个 Kruskal 重构树。 首先创造新的节点,作为联通块的代表元,每个代表元初始时代表 T 中的一个节点。 然后按照某种自定义的顺序(为后文方便说明,这里直接当成边权大小)不重不漏枚举每一条边,对于当前边新建一个节点,然后合并当前边的两个端点所在的联通块的集合,将代表当前边的节点作为新集合的代表元。
几个性质
首先树的每个边都是桥。
对于两个点,它们在构造重构树的过程中在同一个连通块里当且仅当它们路径上的最大权的边已经被枚举到, 这提供了几个性质:
- 寻找在 T 中两个点之间边权最大的边就相当于在重构树中寻找这两点的 LCA 。
- 重构树代表原树某条边的节点 x 代表的子树里面所有代表原树中点的节点所代表的原树中的节点两两之间路径的边权最大值不超过这个 x 代表的边的边权。