Matrix-Tree 定理
引入
此算法可以解决图上生成树计数问题。
值得注意的是,矩阵树定理不能用于存在自环的图。
定义
设 \(G\) 是一个图。
记邻接矩阵 \(A(G)_{i,j} = \#e(i,j), \#e(i,j)\)
若 \(G\) 是无向图
记 \(D(G)\) 表示其度数矩阵,\(D(G)\) 满足 \(D(G)_{i,i}\) 表示第 \(i\) 点的度数,\(D(G)_{i,j} = 0(i \ne j)\) 。
定义基尔霍夫矩阵 \(L(G)\) 为:
记图 \(G\) 的生成树个数为 \(t(G)\)。
若 \(G\) 是有向图
记 \(D(G)^{in}\) 表示入度矩阵,\(D(G)^{in}_{i,i}\) 表示点 \(i\) 的入度,\(D(G)^{in}_{i,j} = 0(i \ne j)\);记 \(D(G)^{out}\) 表示出度矩阵,\(D(G)^{out}_{i,i}\) 表示点 \(i\) 的出度,\(D(G)^{out}_{i,j} = 0(i \ne j)\)。
表示 \(i\) 与 \(j\) 相连的边数。
相似的,定义基尔霍夫矩阵 \(L(G)\)。
不同的是,有向图存在入度和出度基尔霍夫矩阵。
入度基尔霍夫矩阵定义为:\(L^{in}(G) = D(G)^{in} - A(G)\)。
出度基尔霍夫矩阵定义为:\(L^{out}(G) = D(G)^{out} - A(G)\)。
记图 \(G\) 的以 \(i\) 为根的叶向(外向)生成树个数为 \(t^{leaf}(G,i)\)。
记图 \(G\) 的以 \(i\) 为根的根乡(内向)生成树个数为 \(t^{root}(G,i)\)。
定理
定理1
对于一个无向图,它的生成树个数为基尔霍夫矩阵的 \(k-1\) 阶主子式。
定理2
设 \(\lambda_1,\lambda_2,\cdots,\lambda_n-1\) 为无向图 \(G\) 的 \(L(G)\) 的 \(n-1\) 个非零特征值,那么有:\(t(G) = \frac{1}{n} \prod\limits_{i = 1}^{n-1} \lambda_i\)。
定理3
对于一个有向图 \(G\),有:
\(t^{root}(G,i) = L^{in}(G)\) 除去第 \(i\) 行第 \(i\) 列的主子式。
定理4
对于一个有向图 \(G\),有:
\(t^{leaf}(G,i) = L^{out}(G)\) 除去第 \(i\) 行第 \(i\) 列的主子式。
BEST 定理
定理5
对于一个欧拉图 \(G\),记它的欧拉回路总数 \(ec(G)\)。
有:
注意,因为 \(G\) 是一个欧拉图,因此对于每个节点的 \(t^{root}(G,i)\) 相等且每个点的入度等于出度。
证明
不会。
拓展
若一个图有边权,求其所有最小生成树边权积的和,只需要将矩阵中所有元素乘上对应边权即可。