树的重心相关概念与证明
2021.07.20 整体重构。
2022.02.26 搬迁过来。
我知道没图很痛苦所以我可能会在 114514 年后把图加上。
下面所说的以 \(A\) 点为根的 \(B\) 的子树定义为整棵树以 \(A\) 为根时,所有深度大于等于 \(B\) 的节点构成的联通块中包含 \(B\) 的那个。
“整棵树的大小的一半”会缩写为 \(P\)。
重心的基本性质与判定
定义
一棵树中若有一个节点为根时所有子树的大小的最大值最小,那么这个节点为树的重心。
性质一
一棵树中以重心为根的所有的子树的大小均不超过 \(P\)。
证明:
考虑反证法。
假设一棵树中以所有点为根时均有子树的大小超过 \(P\)。
那么随便选一个点,设它为 \(A\) 点,以它为根时它的重儿子为 \(B\)。
既然 \(B\) 为重儿子,那么根据假设,以 \(A\) 为根时 \(B\) 的子树大小一定大于 \(P\)。
然后以 \(B\) 为根,此时 \(A\) 为 \(B\) 的一个儿子,且 \(A\) 的子树大小会小于等于 \(P\)。
若 \(A\) 为 \(B\) 的重儿子,那么假设直接不成立,否则可以重复上述过程。
因为不可以往回走,所以一定会到叶节点,此时一定可以推出矛盾。
(好像有点不严谨,也许转换成归纳法)
引理一
以一个点为根时,在它的任意一个大小大于等于 \(P\) 的子树中选任意一个点,再把根换成它,则此时原根的子树大小大于等于 \(P\)。
证明:
假设原来的根为 \(A\) 点,选的满足条件的点为 \(B\),这棵子树的大小为 \(s\),那么 \(s\ge P\)。
以 \(B\) 为根,相当于把 \(A\) 的子树中把至少 \(s\) 个节点提出。
那么此时 \(A\) 的子树大小小于等于 \(n-s\le n-P=P\)
判定一
一棵树中如果以一个节点为根的所有子树大小均不超过 \(P\),则这个节点为树的重心。
当然也有人拿这条判定做定义的,不过没有区别。只是这样的话我不会证明性质二而已。
证明:
由题可知,设满足条件的这个节点为 \(A\),以 \(A\) 为根的节点的子树大小的最大值不会大于 \(P\)。
再换以任意一个非 \(A\) 点为根时,由引理一,包含 \(A\) 的子树的大小均大于等于 \(P\)。
所以以 \(A\) 点为根时所有子树的大小的最大值最小。
重心的分布
引理二
一棵树有两个重心时,这两个重心之间一定有边直接相连。
证明:
设这两个重心分别为 \(A\) 与 \(B\)。
反证法,假设它们没有边直接相连。
那么以 \(A\) 为根,\(B\) 的子树的大小一定小于 \(P\)。
再把 \(B\) 换成根,把引理一换个符号,就知道 \(A\) 的子树的大小一定大于 \(P\)。
直接矛盾。
性质二
一棵树一定有重心且最多有两个重心。
证明:
由于一棵树中以一个节点为根的子树的大小的最大值肯定有最小值。
所以一棵树一定有重心。
而若有三个重心,那么根据引理二,这三个点两两之间都有边,形成了环,矛盾。
推论一
一棵树有两个重心当且仅当断开两个重心之间的边后形成的两个联通块大小相等即为 \(P\)。
“当”显然是对的,因为以一个点为根时若有一个儿子的子树大小为 \(P\),那么其它子树的大小都会小于 \(P\),即为重心。
在看“仅当”。看到引理二,发现那个假设好像没什么用的样子……
但其实是有用的,因为若没有那个假设,以 \(A\) 为根时 \(B\) 的子树的大小会小于等于 \(P\)。
而小于 \(P\) 时会矛盾,所以只能等于 \(P\)。
所以是“仅当”。
性质三
如果一个点不为重心,那么以它为根时它只有一个重儿子且这棵子树的大小大于 \(P\) 且所有重心都一定在它的重儿子的子树内。
做这题时想到的。
证明:
设这个点为 \(A\)。
因为 \(A\) 不为重心,所以每个重儿子的子树的大小都会大于 \(P\)。
然而若重儿子有多个,那么所有重儿子的子树的大小和根节点加起来会超过 \(2P\) 即整棵树的大小,矛盾。
然后若以任意一个重心为根,那么 \(A\) 的子树的大小会小于等于 \(P\)。
根据引理一,以 \(A\) 为根时,重心所在的子树大小会大于等于 \(P\)。
根据推论一,若等于那么 \(A\) 也为重心,矛盾。
整合一下三句话就全证完了。
推论二
以一个点为根时,一棵树的重心一定在以这个点为顶的重链上。
因为对于一个以根 \(A\) 为顶的重链上的点 \(B\),以 \(B\) 为根时 \(B\) 的重儿子,要么是以 \(A\) 为根时 \(B\) 的父亲,要么是以 \(A\) 为根时 \(B\) 的重儿子,反正都在这条重链上。
性质四
在一棵树上挂一个叶节点,那么原树的重心有两个时,会只留下到叶节点近的那个。有一个时,此点仍为重心。
注意有原树只有一个重心不代表加入节点后仍只有一个。
证明:
咕了。
推论三
分别从两棵树中选出一个点,用边连接,形成的一棵树的重心在两棵原树的重心之间的简单路径上。
就相当与在两棵棵树上分别不断使用性质四,容易发现这是对的。
重心与距离
性质四
计一个点的代价为到所有点的距离和,那么树的重心代价最小。
证明:
咕了。
判定二
计一个点的代价为到所有点的距离和,那么代价最小的点为树的重心。
证明:
咕了。
带权情况
即单个节点的权值已经不是 1,而是任意正数了。
换句话说,一个点 \(A\) 的代价变成了 \(\sum\limits_{i=1}^nsize_i\times dist(i,A)\)。
只要把上面的子树大小换成子树内所有点的权值和,重心换成带权重心等等,上面的所有性质依然是成立的。
点分治
点分治时每次都选择当前子树的重心作为根可以保证递归层数为 \(O(\log n)\) 级别。
证明:
每次选择当前当前子树的重心作为根则可以确定所有子树大小不超过当前子树的大小的一半,即到子树里分治时当前子树大小至少会减半。
直到减半到大小为 1,即只有一个节点,就不会往下分治。
众所周知,一个数 \(n\) 每次减半,只需 \(\log n\) 次便会减为 1。
所以点分治时每次都选择当前子树的重心作为根可以保证递归层数为 \(O(\log n)\) 级别。

浙公网安备 33010602011771号