树的重心:
定义:
即对于树中每一个节点,计算他所有子树中节点数最大的点,这个值最小就是就重心。
其实就是说:对于一个无向图,任选一个点,把他搞成一个树,子树里节点数最大最小,这个点就是重心,因为使以重心为根建立树更加平衡,
树的重心的性质:
1 . 以树的重心为根时,所有子树的大小都不超过整棵树大小的一半。
因为重心平衡。
2 . 树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么到它们的距离和一样。
因为重心使得树更加平衡。
3 . 把两棵树通过一条边相连得到一棵新的树,那么新的树的重心在连接原来两棵树的重心的路径上。
因为
4 . 在一棵树上添加或删除一个叶子,那么它的重心最多只移动一条边的距离。
因为 一棵树的重心不会离叶节点很近。
如何求树的重心?
dfs预处理出每个节点的的子树大小,
枚举每一个点,取最小值,复杂度 O(n+m)