定义:
树的重心有很多等价定义,我们采用这样的定义:树的重心指,该点是使得最大子树的节点个数最小的那个点。设树的节点个数为 n n n。
性质1:
点
u
u
u是树的重心,当且仅当其最大子树的节点个数小于等于
⌊
n
/
2
⌋
\lfloor n/2\rfloor
⌊n/2⌋。
证明:
先证
⇒
\Rightarrow
⇒。如果
u
u
u是重心,但是其最大子树的节点个数大于
⌊
n
/
2
⌋
\lfloor n/2\rfloor
⌊n/2⌋,那么考虑该子树的树根
v
v
v。设
s
[
x
]
s[x]
s[x]为
x
x
x子树的大小,那么
s
[
v
]
>
⌊
n
/
2
⌋
,
n
−
s
[
v
]
<
⌊
n
/
2
⌋
<
s
[
v
]
s[v]>\lfloor n/2\rfloor,n-s[v]<\lfloor n/2\rfloor<s[v]
s[v]>⌊n/2⌋,n−s[v]<⌊n/2⌋<s[v],从而以
v
v
v为树根,其最大子树的大小一定是小于
s
[
v
]
s[v]
s[v]的,与
u
u
u为重心矛盾。
再证
⇐
\Leftarrow
⇐。如果
u
u
u的最大子树的节点个数小于等于
⌊
n
/
2
⌋
\lfloor n/2\rfloor
⌊n/2⌋,但
u
u
u不是重心,假设
v
≠
u
v\ne u
v=u但
v
v
v是重心,考虑
v
v
v的含
u
u
u的那棵子树,从
u
u
u的角度看,其最大子树的节点个数小于等于
⌊
n
/
2
⌋
\lfloor n/2\rfloor
⌊n/2⌋,所以去掉
u
u
u到
v
v
v那条路径的
u
u
u剩余子树的节点和是大于等于
n
−
1
−
⌊
n
/
2
⌋
n-1-\lfloor n/2\rfloor
n−1−⌊n/2⌋,从而
v
v
v的含
u
u
u的那个子树的大小是大于等于
n
−
⌊
n
/
2
⌋
n-\lfloor n/2\rfloor
n−⌊n/2⌋。如果
n
n
n为奇数,则
n
−
⌊
n
/
2
⌋
>
⌊
n
/
2
⌋
n-\lfloor n/2\rfloor>\lfloor n/2\rfloor
n−⌊n/2⌋>⌊n/2⌋,与
v
v
v是重心矛盾。如果
n
n
n是偶数,只有在
u
u
u和
v
v
v的最大子树的节点个数都等于
n
/
2
n/2
n/2并且
u
u
u与
v
v
v相连的时候才不矛盾,此时这两个点都是重心。以上面证明可证此种情况不存在其他重心。
推论:
只有节点个数不唯一的时候才可能有两个重心,并且重心最多两个。当重心有两个的时候,它们是相邻节点。重心的最大子树的节点个数是确定的。
性质2:
设
d
[
u
]
d[u]
d[u]是所有点与
u
u
u的距离之和(假设边权都为
1
1
1),那么当且仅当
u
u
u是重心的时候
d
[
u
]
d[u]
d[u]最小。
证明:先证
⇐
\Leftarrow
⇐。假设
v
v
v使得
d
[
v
]
d[v]
d[v]最小,并且
v
v
v不是重心,那么
v
v
v有一棵子树的大小是大于
⌊
n
/
2
⌋
\lfloor n/2\rfloor
⌊n/2⌋的,如果将
v
v
v向那棵子树挪动一步,则
d
[
v
]
d[v]
d[v]一定会变小,矛盾。所以如果
d
[
v
]
d[v]
d[v]最小,那么
v
v
v一定是重心。
再证
⇒
\Rightarrow
⇒。如果
d
[
u
]
d[u]
d[u]不是最小,设有另外一个点
v
v
v使得
d
[
v
]
d[v]
d[v]最小,那么由性质
1
1
1,
v
v
v是重心,但
u
u
u也是重心,如果重心唯一,这就矛盾了。如果重心不唯一,由上面推论,
n
n
n是偶数,
u
u
u与
v
v
v相邻并且两个点的最大子树的节点个数都等于
n
/
2
n/2
n/2,那么
d
[
u
]
=
d
[
v
]
d[u]=d[v]
d[u]=d[v],也矛盾。所以如果
u
u
u是重心,
d
[
u
]
d[u]
d[u]一定最小。