[学习笔记] 矩阵树定理


因为在临时抱佛脚,所以是没有证明的~

0. 前置芝士

0.1. 拉普拉斯展开

对于行列式 \(D\),任意第 \(i\) 行(列同理)按下式展开的值与行列式值相等

\[\text{Value}=\sum_{j=1}^n (-1)^{i+j}\cdot a_{i,j}\cdot M_{i,j} \]

其中 \(M_{i,j}\)\(a_{i,j}\) 的余子式。


一些闲话:这个可以用来推导 "轮状病毒" 一题中的递推式。

1. 矩阵树定理

1.1. 定理一

1.1.1. 内容

构造连通矩阵和度数矩阵。连通矩阵 \(A\) 的第 \(i\) 行第 \(j\) 列上的数字表示原无向图中 \(i,j\) 两点之间边的条数。度数矩阵 \(D\) 只有 \(D_{i,i}\) 有值表示点 \(i\) 的度数。定义 \(L=D-A\),无向图生成树的个数就是 \(L\) 去掉任意行任意列的矩阵的行列式。

1.1.2. 应用

例 1. 求无向图所有生成树边权乘积的和。

将度数矩阵变成与点邻接边的边权和,连通矩阵变成边的权值再应用矩阵树定理即可。

例 2. 求无向图必选某一条边的所有生成树个数。

我是伞兵,这都不会。简单容斥即可。

例 3. 用生成函数描述限制:

例 4. \(\text{[SDOI 2014] }\)重建

题目要求

\[\begin{align} \text{Ans}&=\sum_{T(V,E')}\left(\prod_{e\in E'}p_e\cdot \prod_{e\in E\setminus E'}(1-p_e) \right)\\ &=\sum_{T(V,E')}\left(\prod_{e\in E'}p_e\cdot \frac{\prod_{e\in E}(1-p_e)}{\prod_{e\in E'}(1-p_e)} \right)\\\ &=\prod_{e\in E}(1-p_e)\cdot \sum_{T(V,E')}\left(\prod_{e\in E'}\frac{p_e}{1-p_e} \right) \end{align} \]

1.2. 定理二

1.2.1. 内容

给出有向图和其中的一个点,求以这个点为根的生成外向树个数(外向树满足每个点有且仅有一条入边)。

构造连通矩阵和度数矩阵。连通矩阵 \(A\) 的第 \(i\) 行第 \(j\) 列上的数字表示有向图中 \(i\rightarrow j\) 的边的条数。度数矩阵 \(D\) 只有 \(D_{i,i}\) 有值表示点 \(i\)入度。定义 \(L=D-A\),答案就是 \(L\) 去掉根所在的行和列的矩阵的行列式。

1.3. 定理三

1.3.1. 内容

给出有向图和其中的一个点,求以这个点为根的生成内向树个数。

构造连通矩阵和度数矩阵。连通矩阵 \(A\) 的第 \(i\) 行第 \(j\) 列上的数字表示有向图中 \(i\rightarrow j\) 的边的条数。度数矩阵 \(D\) 只有 \(D_{i,i}\) 有值表示点 \(i\)出度。定义 \(L=D-A\),答案就是 \(L\) 去掉根所在的行和列的矩阵的行列式。

2. \(\text{BEST}\) 定理

用于求解有向图欧拉回路的个数。

首先,如果存在某个点的入度和出度不相等,那么这张图不存在欧拉回路。否则,设 \(t(s)\) 为以 \(s\) 为根的内向树(或者外向树)个数,\(\text{deg}(s)\)\(s\) 的出度(或者入度),所求即为

\[t(s)\cdot \prod_{v\in V}(\text{deg}(v)-1)! \]

需要注意的是,以任何一个点作为根最后都可以得出一样的答案。

如果要求从点 \(s\) 开始的欧拉回路个数呢?此时只能代入 \(t(s)\),最后答案还要多乘上 \(\text{deg}(s)\).