其他分享
首页 > 其他分享> > 树的直径与重心学习笔记

树的直径与重心学习笔记

作者:互联网

此文为完成任务所设,可能不易懂,能看懂就将就着看吧

1.定义

树的定义:不存在环且联通的图。

树的直径:树中的最长链

树的重心:为一个点,以此点为根,最大子树的大小最小。

2.求法

树的直径求法分两种:两次 DFS/BFS 与树形 dp 。

首先讲好理解点的树形 dp 。

其实很简单,每个节点维护子树到这个点的最长链和次长链。

对于一个子树,能做出贡献的显然只有最长链。

将由子树最长链得到的链与此节点的最长链与次长链作比较。

若比最长链大,则将原最长链赋给次长链,最长链更新。

若比次长链大,直接更新次长链。

每个节点的最长链与次长链相加即可。

然后是两次 DFS/BFS 。

第一遍找到与任意节点最远的节点,第二遍从找到的节点出发,找到最远的节点。

两次的节点即为树的直径。

树的重心:

一次 DFS ,每次记录下当前子树的大小,最后一个子树大小就是总节点数-此子树大小。

算出最大子树大小后就尝试更新答案。注意:可能有一个,也可能有两个。

标签:子树,重心,笔记,节点,DFS,直径,最长,次长
来源: https://www.cnblogs.com/andy-lin102/p/16330062.html