【树的重心】学习笔记
树的重心
定义
在一棵树中,以某点为根,最大子树的节点数最小,该点为这棵树的重心(Centroid)。
求法
我们可以采用树形 DP 的方法求出一棵树的重心。
记在树中以节点 \(u\) 为根节点的子树大小为 \(s_u\),节点 \(u\) 的所有子树中的最大大小为 \(f_u\)。
在遍历当前节点 \(u\) 的时候,根据方向可以将所有除 \(u\) 以外的连通分量分成两大类:\(u\) 上方和 \(u\) 下方的连通分量。其中 \(u\) 上方的连通分量大小为 \(n-s_u\),\(u\) 下方的连通分量有若干个,最大的大小为 \(f_u\)。根据定义,若 \(u\) 为重心,则满足 \(\max\{n-s_u,f_u\}\) 在所有节点中最小。所以我们的目的就是求出:\(\min_{u=1}^n\{\max\{n-s_u,f_u\}\}\) 所代表的节点 \(u\)。
性质
- 当一棵树以节点 \(u\) 为根,且所有点的深度之和最小时,节点 \(u\) 为这棵树的重心;
- 当一棵树以节点 \(u\) 为根,且最大子树的大小不超过节点数的一半时,节点 \(u\) 为这棵树的重心;
- 当一棵树以节点 \(u\) 为根,且此时最大子树的大小最小时,节点 \(u\) 为这棵树的重心;
- 树的重心若不唯一,则一定恰好有两个重心,且这两个重心相邻。删去这两个重心后,会留下两个大小相等的连通分量;
- 在一棵树上增删一个叶子,它的重心至多移动一条边的距离;
- 将两棵树通过一条边联通成一棵新树,则新树的重心一定在原本两棵树的重心构成的路径上。
例题选讲
U104609 【模板】树的重心
模板题,参考上面部分。
P1395 会议
同模板题,增加一个 DFS 求所有点到重心的距离即可。
CF1406C Link Cut Centroids
首先,当 \(n\) 是奇数时,只需要删除并加回任意一条边即可;否则我们考虑在什么情况下会有两个重心。根据定义可得,两个重心的最大子树大小均小于等于 \(\dfrac n2\),而它们各自的儿子又不是重心,说明它们各自的儿子的最大子树大小均大于 \(\dfrac n2\),这说明两个重心的最大子树包含另一个重心,且大小正好都为 \(\dfrac n2\),此时要破坏其中一个中心结构,只需要把其中一个重心为根的子树中的一个叶子结点分给另一个重心即可。

浙公网安备 33010602011771号