树上乱搞 - 树的重心

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