【模板】树的重心

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

树的重心

定义:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。

算法流程

首先,利用前向星存边建立边表。由于无向,所以要连两次边。我们用一次 dfs() d f s ( ) 建立以1为根节点时每个结点所在子树的结点数。

接下来考虑把这个点删掉的结果,如果一个非根结点有 p p 个儿子,那么删掉这个点之后会有 p + 1 个连通分量,因为这个结点不是根节点,那么除了这个结点及它的所有子树外还有一个连通分量,我们将之称为这个结点的上方子树。接下来,计算这些子树(包括上方子树)的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值