树的重心
模板1:树的重心
模板2:树的重心
1求重心,2求重心删除后的最大连通块。
基本方法
对于每个点,我们计算一下它分离后的最大连通块。
对于它的子节点,就是 \(\max sz[son]\),对于父节点,就是 \(n-sz[x]\)。
然后统计一下最小值,最后循环一遍找出即可。
特殊方法
对于一个点,如果它有一个子树 \(sz>n/2\)(以下均为向下取整),那么重心一定在这个子节点中,重复这个过程,这是利用重心的性质:分离后任意一个连通块大小 \(\le n/2\)。最终,要找到第二个重心,只需要枚举它的相邻边,找哪个点可以和它把整棵树划分成 \(n/2,n/2\)(n为偶数),这也是重心的性质。
- 重心分离得到的点满足 \(\min mx_{sz}\),且 \(mx_{sz}\le n/2\)。
- 重心要么只有一个,要么两个;两个时,两个重心将树划分成 \(n/2,n/2\)(n为偶数)。