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