00:00:00
树相关 笔记
一、树的直径
就是树上最长的一条链。
法一:两次 dfs
先随便挑一个点,dfs 找到离这个点最远的点,再从找到的这个点出发 dfs,找到离这个点最远的点,这两点之间的路径就是直径。
法二:dp
随便挑一个点往下 dp,找到从每个点
二、树的重心
就是找到一个点,使以他作为根时,最大的子树大小,比以任何其他点作为根时的最大子树大小都要小。
直接一次 dfs 就能找到。
三、Prüfer 序列
1. 定义
用一个长度为
构建方法:每次找到编号最小的叶子节点
2. 构造
显然可以
3. 性质
- 每个点在序列中出现的次数即为其度数减一。
因为每个点的所有
4. 重建树
由性质,可以从 Prüfer 序列知道每个点的度数,哪些是叶子节点。同样从小到大遍历编号,找到最小的叶子结点,将每个点父亲从前往后设为 Prüfer 序列的每个编号即可。
如果某个点被连接的次数等于他儿子的个数,那他也相当于一个“叶子结点”,往上连边。判断他的连接次数也是很好维护的。
5. 性质
- 一个有
个点的完全无向图有 个生成树。
一个树对应一种 Prüfer 序列的填法,Prüfer 序列
6. Caylay 公式
相当于规定了每个点在 Prüfer 序列中出现的次数。
为方便表述,令
第一个点
即
红色的全都消掉了,蓝色的因为
那么就是