树论相关
树的重心
定义
树上一点 \(x\),令 \(x\) 的最大子树的节点数最小
性质:
- 对于删除重心后所得的所有子树,最大节点数不超过原树的 \(\frac{1}{2}\)
- 一棵树最多只有两个重心,这两个重心相邻
- 这两个重心相邻时,记深度较浅的节点为 \(u\) ,深度较深的节点为 \(v\),则 \(size_1-size_v=size_v\)
- 树中所有节点到重心的距离和最小,如果有两个重心,那么树上所有节点分别到这两个重心的距离和相等
- 两棵树用一条边合并成一棵树,新的重心在原树两个重心的路径上
- 在树上删除 \(/\) 添加一个叶子节点,重心最多只会移动一条边
树的直径
定义
树上两点间的最长路径
性质
- 直径两端点一定会是两个叶子节点
- 对于一棵树,对于任意一条直径 \(Path(s\to 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\to b),\mathrm{Path}(c\to d)\)。若 \(\mathrm{Path}(a\to b)\) 与 \(\mathrm{Path}(c\to d)\) 有交,仅当 \(\mathrm{lca}(a,b)\in\mathrm{Path}(c,d)\vee \mathrm{lca}(c,d)\in \mathrm{Path}(a,b)\)。
判断一个点是否在一条路径上:设给出的路径为 \(\mathrm{Path}(x,y)\),给出的点为 \(z\)。若 \(z\in \mathrm{Path(x,y)}\),仅当 \(\mathrm{dis}(x,z)+\mathrm{dis}(z,y)=\mathrm{dis}(x,y)\)。
\(n\) 个点选 \(m\) 个点作为根的有标号森林数为:\(C_n^m\times n^{n-1-m}\times m\)。使用 \(\text{Prufer}\) 序列证明:在森林中加入一个虚点(方点),点权设为 \(\infty\),则这 \(n+1\) 个点的 \(\text{Prufer}\) 序列长度为 \(n-1\),且 \(\text{Prufer}\) 序列中最后 \(1\sim k\) 项都是这个方点,倒数第 \(k+1\) 项是选中的 \(k\) 个根中的任意一点,第 \(1\sim n-k-1\) 项只要 \(\in [1,n]\) 即可,故总方案数为上式。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号