矩阵树定理
概述
在\(O(n^3)\)时间内解决无向图最小生成树问题
关联矩阵
对无向图\(G\),其关联矩阵\(B\)为\(n*m\)矩阵其中若\(e_k=(i,j)\)则\(B_{i,k},B_{j,k}\)中\(1\)个\(1\),\(1\)个\(-1\),第\(k\)列其余为\(0\)2
【性质】:引入\(B\)的转置\(B^T\)则有\(\displaystyle BB^T_{i,j}=\sum_{k=1}^mB_{i,k}B^T_{k,j}=\sum_{k=1}^mB_{i,k}B_{j,k}\)
也就是\(B\)的\(i\)行和\(j\)行的内积
- 当\(i=j\),\(BB^T_{i,j}=deg_i\)
- 当\(i\ne j\)
- 若存在\((i,j),BB^T_{i,j}=-1\)
- 否则\(BB^T_{i,j}=0\)
Kirchhoff矩阵
考虑更更显然的构造满足上面\(BB^T\)性质的矩阵\(C\)
\(C=\text{度数矩阵-邻接矩阵}\)
Matrix-tree定理
对任意无向图\(G\),其生成树个数等于其Kirchhoff矩阵的任意\(n-1\)阶主子式的行列式绝对值
证明
留坑
最小生成树计数
考虑模拟\(\mathtt{Kruskal}\)的过程
考虑从小到大加入边的过程,把每一种相同的权值的边与比之小的边当成一个阶段\(G_0\)对新加入的这些可形成联通块分别求Kirchhoff矩阵
例题
最小树形图
概述
在\(O(nm)\)时间内解决有向图最小树形图问题
有向图以\(rt\)为根,最小树形图定义为:以\(rt\)为根可以到达其余所有点的权值和最小有向树
朱刘算法
- 1.求最短弧集合:在当前图上求出除\(rt\)外每个点权值最小的入边\(in_i\),这\(n-1\)必定是权值和最小的子图,但并非树
- 2.检查有环否,有转3,没有转4
- 3.缩环,对\(x\)在环\(now\)上若存在\((i,x,v)\)则\((i,now,v-in_x)\),若存在\((x,i,v)\)则\((now,i,v)\)
- 4.展开收缩点
第三条的边权改变是后悔法贪心
例题
其他
动态维护MST
直接\(LCT\)消圈,离线改用并查集暴力即可
(严格)次小生成树
定理:无向图存在一个次小生成树是任意最小生成树的临集
考虑枚举每一条不在最小生成树上的边,删去环上的最大边(要么就是严格次大边)中取最小即可
实现上使用倍增
最小度限制生成树
考虑从\(k\)度向\(k+1\)度扩展过程
留坑