树的重心
在一颗无根树中,若选择某节点为根后,可以使得最大的子树的节点数最小,则该点称为树的重心。树的重心有许多有用的性质,例如最小距离和。
等价性质
等价性质的任意一条都可以作为重心的另一个定义。
定义:最大子树最小
在一颗无根树中,若选择某节点为根后,可以使得最大的子树的节点数最小,则该点称为树的重心。
子树大小不超过一半
性质
以重心为根时,所有子树的节点数不超过全树节点数的一半。
证明:设该树有 n 个节点,g 为重心(以 g 为根时最大子树最小),设 a_1, a_2, \dots, a_m 为 g 的全部子节点。设 s(u) 表示以 g 为根的有根树中,以 u 为根节点的子树大小。
假设 s(a_1) > n / 2,则显然以 a_1 为根的子树是最大子树,且 s(a_2) + \cdots + s(a_n) < n / 2 - 1。转以 a_1 为根(函数 s 意义不改变,依然是在以 g 为根的树中讨论),设 b_1, \dots, b_l 为 a_1 的全部子节点,此时 a_1 的子节点为 g, b_1, \dots, b_l,以 g 为根的子树大小 s(a_2) + \cdots + s(a_n) + 1 < n / 2 < s(a_1),而显然 以 b_1, \dots, b_l 为根的子树大小也小于 s(a_1),故以 a_1 为根时,最大子树大小小于原来的最大子树大小 s(a_1),与 g 为使最大子树的大小最小的节点矛盾。
判定
若以某点为根时,所有子树的节点数不超过全树节点数的一半,则该点为重心。
设树的大小为 n,并且以 g 为根时,子树大小不超过一半。下文用”子树 a“表示 g 为根时,以 a 为根的子树,用 n(a) 表示其大小(节点数)。假设 g 的一个子节点为 a_1。
若子树 a_1 的大小严格小于n / 2,不失一般性,假设 a_1 是重心,则由重心的性质,其子树大小不超过 n / 2,但此时以 g 为根的子树大小 m 满足 m + n(a_1) = n,即 m = n - n(a_1) > n / 2,矛盾。故 a_1 不可能是重心。以 a_1 的子节点为根时,亦包含了以 g 为根的子树,其最大子树大小将更大,同样不可能是重心。
若子树 a_1 的大小等于 n / 2,则 g 的最大子树大小为 n / 2。以 a_1 为根时,以 g 为根的子树大小等于 n - n(a_1) = n / 2,即 a_1 的最大子树大小也为 n / 2。而以其他点为重心时,都必定包含 g 或 a_1 为根的子树,最大子树大小大于 n / 2,比 g 和 a_1 的最大子树大,不可能是重心。故 g 和 a_1 的最大子树大小都为 n / 2,两者都为重心。
推论
当树的节点数 n 为奇数时,这棵树有且只有一个重心;当 n 为偶数时,树至多有两个重心,且此时两个重心必定邻接。
距离和最小
性质
若 g 为重心,则在树中所有点到某点的距离和中,到 g 的距离和最小。如果树有两个重心,则它们的距离和相等。
证明思路:设 d(u) 为所有节点到 u 的距离和,观察从重心移动到其他点时,对重心的贡献(某些节点的距离 +1,某些距离 -1,总贡献)
判定
若树到所有点的距离和中,到 g 点的距离和最小,则 g 为重心。
带权重心
若每个节点带一个权重,树的大小定义为全部节点的权重和,则依然可以定义重心,重心的很多性质依然成立。
子树大小
子树的大小也应该相应地定义为节点权重和。此时,选择某节点为根后,可以使得最大的子树大小最小,则该点称为树的重心。
读完了,有什么想法?
阅读已保存的问答示例,并循着引用回到原文。