树的直径与重心学习笔记
作者:互联网
此文为完成任务所设,可能不易懂,能看懂就将就着看吧
1.定义
树的定义:不存在环且联通的图。
树的直径:树中的最长链
树的重心:为一个点,以此点为根,最大子树的大小最小。
2.求法
树的直径求法分两种:两次 DFS/BFS 与树形 dp 。
首先讲好理解点的树形 dp 。
其实很简单,每个节点维护子树到这个点的最长链和次长链。
对于一个子树,能做出贡献的显然只有最长链。
将由子树最长链得到的链与此节点的最长链与次长链作比较。
若比最长链大,则将原最长链赋给次长链,最长链更新。
若比次长链大,直接更新次长链。
每个节点的最长链与次长链相加即可。
然后是两次 DFS/BFS 。
第一遍找到与任意节点最远的节点,第二遍从找到的节点出发,找到最远的节点。
两次的节点即为树的直径。
树的重心:
一次 DFS ,每次记录下当前子树的大小,最后一个子树大小就是总节点数-此子树大小。
算出最大子树大小后就尝试更新答案。注意:可能有一个,也可能有两个。
标签:子树,重心,笔记,节点,DFS,直径,最长,次长 来源: https://www.cnblogs.com/andy-lin102/p/16330062.html