矩阵树定理学习笔记

用来求和一个图的生成树个数相关的算法,时间复杂度 \(O(n^3)\)

你要会求一个矩阵的行列式,这是 和行列式有关的前置知识

定理阐述

对于无向图

定义度数矩阵 \(D_{i,j}=[i=j]\deg_i\),其中 \(\deg_i\) 表示 \(i\) 的度数。

定义邻接矩阵为 \(E_{i,j}\) 为边 \((i,j)\) 的个数。

定义 Kirchhoff 矩阵为 \(L=D-E\),则把 \(L\) 去掉第 \(i\) 行和第 \(i\) 列(\(i\) 是这棵树的根,因为是无向图,所以随意),这个无向图的生成树个数为剩下矩阵的行列式。

对于内向生成树

定义度数矩阵 \(D_{i,j}=[i=j]\deg_i\),其中 \(\deg_i\) 表示 \(i\) 的出度。

定义邻接矩阵为 \(E_{i,j}\) 为边 \((i,j)\) 的个数。

定义 Kirchhoff 矩阵为 \(L=D-E\),则把 \(L\) 去掉第 \(i\) 行和第 \(i\) 列(\(i\) 是这棵树的根),这个无向图的生成树个数为剩下矩阵的行列式。

对于外向生成树

定义度数矩阵 \(D_{i,j}=[i=j]\deg_i\),其中 \(\deg_i\) 表示 \(i\) 的如度。

定义邻接矩阵为 \(E_{i,j}\) 为边 \((i,j)\) 的个数。

定义 Kirchhoff 矩阵为 \(L=D-E\),则把 \(L\) 去掉第 \(i\) 行和第 \(i\) 列(\(i\) 是这棵树的根),这个无向图的生成树个数为剩下矩阵的行列式。

利用行列式性质的证明

只证明无向图的情况,对于内向生成树和外向生成树的情况是类似的。

行列式:\(\det(A)=\sum _{p_{1,2\dots n}} (-1)^{\pi(p)} \prod _{i=1}^n a_{i,p_i}\)

钦定父亲,也就是行列式里枚举的排列,后面的连乘数值上这种情况的方案数,当 \(p_i=i\) 时表示点 \(i\) 可以随便选父亲,因此有度数种情况。

如果出现了环,假设长度为 \(k\),那么这个环对 \((-1)^{\pi(p)}\) 的影响是 \((-1)^{k-1}\) 的。但由于 Kirchhoff 矩阵为 \(L=D-E\),边权乘了 \(-1\),所以它实际上对系数的影响是 \((-1)^{2k-1}=-1\)

一个环对系数的影响是 \(-1\),可以看作容斥系数,所以行列式的值就是生成树的个数。

BEST 定理

对于一个有向欧拉图,不同的欧拉回路个数是所有点入度减一的阶乘的乘积,乘以内向生成树的个数。

posted @ 2024-08-03 19:11  fydj  阅读(15)  评论(0编辑  收藏  举报