树的重心
定义
树上一点 (x),令 (x) 的最大子树的节点数最小
性质:
- 对于删除重心后所得的所有子树,最大节点数不超过原树的 (frac{1}{2})
- 一棵树最多只有两个重心,这两个重心相邻
- 这两个重心相邻时,记深度较浅的节点为 (u) ,深度较深的节点为 (v),则 (size_1-size_v=size_v)
- 树中所有节点到重心的距离和最小,如果有两个重心,那么树上所有节点分别到这两个重心的距离和相等
- 两棵树用一条边合并成一棵树,新的重心在原树两个重心的路径上
- 在树上删除 (/) 添加一个叶子节点,重心最多只会移动一条边
树的直径
定义
树上两点间的最长路径
性质
- 直径两端点一定会是两个叶子节点
- 对于一棵树,对于任意一条直径 (Path(s o t)) 和任意一点 (x),(s) 或 (t) 一定是距离 (x) 最远的点之一
- 对于两棵树,如果树 (T_1) 直径两端点为 ((u,v)),树 (T_2) 直径两端点为 ((x,y)),用一条边连接两棵树 (T_1,T_2),得到的新树直径两端点 (in {x,y,u,v})
- 对于一棵树,如果在一个点下接一个叶子节点,最多只会改变直径的一个端点
- 若一棵树存在多条直径,则这些直径交于一点并且交点就为这些直径的中点
最小生成树
定义
图 (G) 的边权之和最小的生成树 (T)
性质
- 把所有边权相同的视为边组,每一组边组在最小生成树的条数是固定的,对连通性的贡献也是固定的
- 换掉一条边并且保证结果是树记为一次操作,树 (A) 和 (B) 是无向图的两个生成树,则 (A) 可以通过若干次操作变成 (B)(对最小生成树也成立)
- 如果无向图的边权都不相同,则最小生成树是唯一的
- 如果一棵生成树,任何边都在某棵最小生成树上,则它不一定是最小生成树
- 对于任意正确加边方案(即不存在环),加完小于某权值的所有边后当前边集的连通性是一样的
杂项
判断树上两条路径是否有公共点:设给出的两条路径为 (mathrm{Path}(a o b),mathrm{Path}(c o d))。若 (mathrm{Path}(a o b)) 与 (mathrm{Path}(c o d)) 有交,仅当 (mathrm{lca}(a,b)inmathrm{Path}(c,d)vee mathrm{lca}(c,d)in mathrm{Path}(a,b))。
判断一个点是否在一条路径上:设给出的路径为 (mathrm{Path}(x,y)),给出的点为 (z)。若 (zin mathrm{Path(x,y)}),仅当 (mathrm{dis}(x,z)+mathrm{dis}(z,y)=mathrm{dis}(x,y))。
(n) 个点选 (m) 个点作为根的有标号森林数为:(C_n^m imes n^{n-1-m} imes m)。使用 ( ext{Prufer}) 序列证明:在森林中加入一个虚点(方点),点权设为 (infty),则这 (n+1) 个点的 ( ext{Prufer}) 序列长度为 (n-1),且 ( ext{Prufer}) 序列中最后 (1sim k) 项都是这个方点,倒数第 (k+1) 项是选中的 (k) 个根中的任意一点,第 (1sim n-k-1) 项只要 (in [1,n]) 即可,故总方案数为上式。