树的重心
定义:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。
算法流程
首先,利用前向星存边建立边表。由于无向,所以要连两次边。我们用一次 dfs()dfs() 建立以1为根节点时每个结点所在子树的结点数。
接下来考虑把这个点删掉的结果,如果一个非根结点有 pp 个儿子,那么删掉这个点之后会有 个连通分量,因为这个结点不是根节点,那么除了这个结点及它的所有子树外还有一个连通分量,我们将之称为这个结点的上方子树。接下来,计算这些子树(包括上方子树)的

树的重心是指一个点,其所有子树中最大的子树节点数最少。删除此点后,生成的多棵树尽可能平衡。通过前向星存储边并进行DFS遍历,计算每个节点的子树大小,然后找出删除节点后连通分量的最大值中的最小值,该节点即为树的重心。算法的时间复杂度和空间复杂度都是O(n)。
1890

被折叠的 条评论
为什么被折叠?



