树的重心

\开坑/ \开坑/ \开坑/

\[\textbf{算法笔记(1): 树的重心} \]


定义:如果在树中选择某个节点并删除,这棵树将分为若干棵子树,统计子树节点数并记录最大值。取遍树上所有节点,使此最大值取到最小的节点被称为整个树的重心。

简单性质:

  • 树的重心如果不唯一,则至多有两个,且这两个重心相邻。
  • 以树的重心为根时,所有子树的大小都不超过整棵树大小的一半。
  • 树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么到它们的距离和一样。
  • 把两棵树通过一条边相连得到一棵新的树,那么新的树的重心在连接原来两棵树的重心的路径上。
  • 在一棵树上添加或删除一个叶子,那么它的重心最多只移动一条边的距离。

规定:

$ \operatorname{mss} $ : maximum subtree size, 最大子树大小。

$ \operatorname{size}_u (v) $ : 以 \(u\) 为根时 \(v\) 的子树大小。

$ u \leftrightarrow v $ : \(u, v\) 相邻。语句复合时不考虑重边自环。
u <---> v

$ u \ \dddot {\leftrightarrow} \ v $ : \(u,v\) 之间有简单路径相连。语句复合时不考虑重边自环。
u <:::> v

\(n\) : 整棵树的大小。

引理:

  • 若 $ u \leftrightarrow v $, 则 $ \operatorname{size}_u (v) + \operatorname{size}_v (u) = n $ .

  • 设 $ u \leftrightarrow v \leftrightarrow w $, 则 $ \operatorname{size}_u (v) > \operatorname{size}_v (w) $ .

根据不等式的传递性,更强的结论:

  • 设 $ u \ \dddot \leftrightarrow \ v \ \dddot \leftrightarrow \ w $, 则 $ \operatorname{size}_u (v) > \operatorname{size}_v (w) $ .

性质


性质一:某个点是树的重心等价于它最大子树大小不大于整棵树大小的一半。

证明:

  • 充分性:
    假设 \(u\) 是树的重心,对于 \(u \leftrightarrow v \leftrightarrow w\)\(\operatorname{size}_u (v) = \operatorname{mss} (u) > \lfloor\dfrac n 2 \rfloor\) .
    那么以 \(v\) 为根节点时,$\operatorname{size}_v (u) = n - \operatorname{size}_v (u) < \lfloor \dfrac n 2 \rfloor < \operatorname{size}_u (v) = \operatorname{mss}(u) $,
    又有 $ \operatorname{size}_v (w) < \operatorname{size}_u (v) = \operatorname{mss} (u) $ . 故 $ \operatorname{mss}(v) < \operatorname{mss}(u) $ , 与 \(u\) 是重心矛盾。命题成立。

  • 必要性:
    假设 \(u\) 是树的重心,有 $ \operatorname{mss}(u) \le \lfloor \dfrac n 2 \rfloor $ .
    任意 $ u \leftrightarrow v \ \dddot \leftrightarrow \ w $ , 有 $ \operatorname{size}_u(v) \le \lfloor \dfrac n 2 \rfloor $ .
    那么 $ \operatorname{size}_v(u) = n - \operatorname{size}_u(v) \ge \lfloor \dfrac n 2 \rfloor \ge \operatorname{mss}(u) $ .
    所以 $ \operatorname{mss}(v) \ge \operatorname{mss}(u) $ . 又有 $ \operatorname{size}_w(v) > \operatorname{size}_v(u) \ge \operatorname{mss}(u) $ .
    因此 \(u\) 是所有节点中 $ \operatorname{mss} $ 最小值之一,也就是树的重心。


性质二:树至多有两个重心。如果树有两个重心,那么它们相邻。此时树一定有偶数个节点,且可以被划分为两个大小相等的分支,每个分支各自包含一个重心。

证明:

  • \(u\) 是树的重心,考虑 $ u \leftrightarrow v \ \dddot \leftrightarrow \ w $ ,
    由性质一必要性的证明,我们有 $ \operatorname{mss}(v) \ge \operatorname{mss}(u) $ , $ \operatorname{mss}(w) > \operatorname{mss}(u) $ .
    说明如果这棵树上如果有异于 \(u\) 的重心 \(g\) , 那么 \(u, g\) 必然相邻。即树上的重心两两相邻。
    若这棵树上有超过两个重心,那么由于每两个重心之间均有边相连,发现形成了环,与树的性质矛盾。故树至多有两个重心且这两个重心相邻。
  • 由上述条件,我们知道 $ \operatorname{size}_u(v) = \operatorname{size}_v(u) $ , 而我们又有 $ \operatorname{size}_u(v)+\operatorname{size}_v(u) = n $ .
    于是我们有 $ \operatorname{size}_u(v)=\operatorname{size}_v(u)=\dfrac n 2 $ .
    所以在有两个重心时,树的大小一定是偶数,且可以被划分为两个大小相等的分支,每个分支各自包含一个重心。

性质三:树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么到它们的距离和一样。反过来,距离和最小的点一定是重心。

证明:

  • 首先这是一个经典的换根问题。
    对于某一非重心点 \(u\) , 必然存在 \(v \leftrightarrow u\) , 使得 $ \operatorname{size}_u(v) > \lfloor \dfrac n 2 \rfloor $ ,
    则 $ \operatorname{dis}(v) < \operatorname{dis}(u) $ .
    那么除了重心以外的点都至少存在一个相邻点使得 $ \operatorname{dis} $ 更小,根据偏序关系的性质,重心应当比其他点的 $ \operatorname{dis} $ 都小。
  • 如果这棵树上有两个重心 $ g_1, g_2 $ , 那么显然有 $ \operatorname{dis}(g_1) = \operatorname{dis}(g_2) $ .
  • 上面已经说明了如果一个点不是重心,那么它相邻的某个点的 $ \operatorname{dis} $ 一定比它的小,所以不是距离和最小的点。因此,距离和最小的点就是重心。
    • 这也说明了每一棵树上均有重心。

性质四:往树上增加或减少一个叶子,如果原节点数是奇数,那么重心可能增加一个,原重心仍是重心;如果原节点数是偶数,重心可能减少一个,另一个重心仍是重心

证明:

  • 重心的每棵子树的节点数都是小于等于 $ \dfrac n 2 $ 的,同时有大小为 $ \dfrac n 2 $ 的子树最多只有一棵。这时 \(n\) 显然是偶数,而且这棵子树的根节点也必然是重心,它也拥有一棵大小为 $ \dfrac n 2 $ 的子树。
  • 增加一个叶子,整棵树大小变成 \(n+1\) .
  • 如果此时原来的某个重心不再是重心,那么添加叶子的那棵子树原来的大小一定大于 $ \dfrac {n+1} 2 - 1 = \dfrac {n-1} 2 $ , 只有大小为 $ \dfrac n 2 $ 的子树才符合要求,这时 \(n\) 只能是偶数
    往这棵子树上添加一个节点后,这棵子树的根节点(“另一个重心”)仍然是重心,他拥有一个大小为 $ \dfrac n 2 $ (这时候整棵树大小不是 \(n\) 了)的子树和另外一系列节点数总和为 $ \dfrac n 2 $ 的子树,均小于 $ \dfrac {n+1} 2 $ .
  • 如果增加叶子后出现了新的重心,那么添加叶子的那颗子树原来的大小要小于等于 $ \lfloor \dfrac n 2 \rfloor $ (原来重心的限制) , 同时要大于等于 $ \lfloor \dfrac {n+1} 2 \rfloor - 1 $ (新的重心形成的条件) .
    于是这棵树的大小只能正好为 $ \dfrac {n-1} 2 $ , 这时 \(n\) 只能是奇数。这时原来的重心拥有一棵大小为 $ \dfrac {n+1} 2 $ 的子树和一系列节点数总和为 $ \dfrac {n-1} 2 $ 的子树,仍然是重心。
    • 删除的情况可以类似的证明。

性质五:把两棵树通过一条边相连得到一棵新的树,则新的重心在较大的一棵树一侧的连接点与原重心之间的简单路径上。如果两棵树大小一样,则重心就是两个连接点。

这个结论比大部分博客给出的“新的重心在原来两个重心之间的简单路径上”要强

  • 两棵树大小一样的情形显然。
  • 设两棵树的节点数分别为 \(n\)\(m\) ($ n>m $) , 我们先建出较大的树,然后一个点一个点的把较小的树添加进来。按照性质四,这个过程中可能会出现重心的增加和减少,我们把一组增加和减少称为移动,则重心一定是往连接点方向移动的。
  • 现在只需要证明重心不可能逾越自己一侧的连接点。
    事实上,当重心达到自己一侧的连接点时,设这时已经添加了 \(k\) 个节点,那么想要通过再添加一个节点让另一侧的连接点也成为重心,需要满足 \(k+n+1\) 为偶数,\(k<m\) , 且 $ k = \dfrac {k+n-1} 2 $ 即 \(k=n-1\) .
    注意到 $ k < m \le {n-1} $ , 故这是不可能的。( \(k\) 不能等于 \(m\) , 因为还要再添加一个节点。)

参考

https://oi-wiki.org/graph/tree-centroid/

https://zhuanlan.zhihu.com/p/357938161


posted @ 2024-08-09 20:32  Jairon  阅读(385)  评论(0)    收藏  举报