因为在临时抱佛脚,所以是没有证明的~
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.
用生成函数描述限制:\(\rm Link.\)
例 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)\).
3. 一些特殊的行列式
3.1. 箭型行列式
\[D_n= \left|\begin{array}{cccc} x_1&1&1 &... &1\\ 1&x_2&0&\cdots &0\\ 1&0&x_3&\cdots&0\\ \vdots &\vdots &\vdots &\ddots&\vdots \\ 1&0&0&...&x_n \end{array}\right|
\]
将第一列元素依次减去第 \(i\) 列的 \(\frac{1}{x_i}\) 倍有
\[D_n= \left|\begin{array}{cccc} x_1-\frac{1}{x_2}-\cdots -\frac{1}{x_n}&1&1 &... &1\\ 0&x_2&0&\cdots &0\\ 0&0&x_3&\cdots&0\\ \vdots &\vdots &\vdots &\ddots&\vdots \\ 0&0&0&...&x_n \end{array}\right|
\]
所以有
\[D_n=\left(x_1-\sum_{i=2}^{n}\frac{1}{x_i}\right)\cdot \prod_{i=2}^{n}x_i
\]
可以发现,上文的推导可以应用于任何形状相同的行列式。
比如下面这个行列式
\[D_n=\left|\begin{array}{cccc} 1+x_{1}^2&x_1x_2&x_1x_3 &... &x_1x_n\\ x_2x_1&1+x_{2}^2&x_2x_3&...&x_2x_n\\ x_3x_1&x_3x_2&1+x_{3}^2&...&x_3x_n\\ \vdots &\vdots &\vdots &\ddots&\vdots\\ x_nx_1&x_nx_2&x_nx_3&...&1+x_{n}^2 \end{array}\right|
\]
每一行都有类似 \(kx_1,kx_2,\dots,kx_n\),所以考虑升阶
\[D_n=\left|\begin{array}{cccc} 1&x_1&x_2&x_3&...&x_n\\ 0&1+x_{1}^2&x_1x_2&x_1x_3 &... &x_1x_n\\ 0&x_2x_1&1+x_{2}^2&x_2x_3&...&x_2x_n\\ 0&x_3x_1&x_3x_2&1+x_{3}^2&...&x_3x_n\\ 0&\vdots &\vdots &\vdots &\ddots&\vdots\\ 0&x_nx_1&x_nx_2&x_nx_3&...&1+x_{n}^2 \end{array}\right|
\]
这样就可以用第一行消下面所有行了
\[D_n=\left|\begin{array}{cccc} 1&x_1&x_2&x_3&...&x_n\\ -x_1&1&0&0 &... &0\\ -x_2&0&1&0&...&0\\ -x_3&0&0&1&...&0\\ \vdots&\vdots &\vdots &\vdots &\ddots&\vdots\\ -x_n&0&0&0&...&1 \end{array}\right|
\]
这就是箭型行列式,直接化简即可。
3.2. 两三角型行列式
特征为对角线上方元素均为 \(a\),下方元素均为 \(b\)。当 \(a=b\) 时可化为箭型行列式计算,具体可以将 \(i=2\dots n\) 行都减去第一行;当 \(a\not=b\) 时采用 拆行法 计算,它的目的是为了 降阶
\[D_n=\left|\begin{array}{cccc} x_1&a&a &... &a\\ b&x_2&a&...&a\\ b&b&x_3&...&a\\ \vdots &\vdots &\vdots &\ddots &\vdots \\ b&b&b&...&x_n \end{array}\right|
\]
\[D_n=\left|\begin{array}{cccc} x_1&a&a &... &a\\ b&x_2&a&...&a\\ b&b&x_3&...&a\\ \vdots &\vdots &\vdots &\ddots &\vdots\\ b&b&b&...&b \end{array}\right|+\left|\begin{array}{cccc} x_1&a&a &... &0\\ b&x_2&a&...&0\\ b&b&x_3&...&0\\ \vdots &\vdots &\vdots &\ddots &\vdots\\ b&b&b&...&x_n-b \end{array}\right|
\]
将第 \(i=1\dots n-1\) 列都减去最后一列,得
\[D_n=\left|\begin{array}{cccc} x_1-a&0&0 &... &a\\ b-a&x_2-a&0&...&a\\ b-a&b-a&x_3-a&...&a\\ \vdots &\vdots &\vdots &\ddots &\vdots\\ 0&0&0&...&b \end{array}\right|+(x_n-b)\cdot D_{n-1}
\]
所以
\[D_n=b\cdot \prod_{i=1}^{n-1}(x_i-a)+(x_n-b)\cdot D_{n-1}
\]
如果拆分成 \(a,x_n-a\),就可以得到
\[D_n=a\cdot \prod_{i=1}^{n-1}(x_i-b)+(x_n-a)\cdot D_{n-1}
\]
将 \(D_{n-1}\) 消掉可得
\[D_n=\frac{1}{a-b}\cdot \left(a\cdot \prod_{i=1}^{n}(x_i-b)-b\cdot \prod_{j=1}^{n}(x_j-a)\right)
\]
3.3. 各行/列元素和相等型行列式
\[D_n= \left|\begin{array}{cccc} 1+x_1&x_1 &... &x_1\\ x_2&1+x_2&...&x_2\\ \vdots &\vdots &\ddots&\vdots\\ x_n&x_n&...&1+x_n \end{array}\right|
\]
\[D_n= \left|\begin{array}{cccc} 1+\sum_{i=1}^{n}x_i&1+\sum_{i=1}^{n}x_i &... &1+\sum_{i=1}^{n}x_i\\ x_2&1+x_2&...&x_2\\ \vdots &\vdots &\ddots&\vdots\\ x_n&x_n&...&1+x_n \end{array}\right|
\]
\[D_n= \left(1+\sum_{i=1}^{n}x_i\right)\cdot \left|\begin{array}{cccc} 1&1 &... &1\\ x_2&1+x_2&...&x_2\\ \vdots &\vdots &\ddots&\vdots\\ x_n&x_n&...&1+x_n \end{array}\right|= \left(1+\sum_{i=1}^{n}x_i\right)\cdot \left|\begin{array}{cccc} 1&0&... &0\\ x_2&1&...&0\\ \vdots &\vdots &\ddots&\vdots\\ x_n&0&...&1 \end{array}\right|=1+\sum_{i=1}^{n}x_i
\]
3.4. 两条线型行列式
\[D_n=\left|\begin{array}{cccc} a_1&b_1&0 &... &0\\ 0&a_2&b_2&...&0\\ 0&0&a_3&...&0\\ \vdots &\vdots &\vdots &\vdots&\vdots\\ 0&0&...&a_{n-1}&b_{n-1} \\ b_n&0&...&0&a_n \end{array}\right|
\]
按照第一列两个非零元素拉普拉斯展开即可
\[D_n=\prod_{i=1}^{n}a_i+(-1)^{n+1}\cdot \prod_{i=1}^{n}b_i
\]
3.5. 类范德蒙德型行列式
特征为存在逐行(列)元素按幂递增(减)
\[D_n=\left|\begin{array}{cccc} a_{1}^n& a_{1}^{n-1}b_1&... &a_1b_1^{n-1}&b_1^n\\ a_{2}^n&a_{2}^{n-1}b_2&...&a_2b_2^{n-1}&b_2^n\\ \vdots&\vdots&\ddots&\vdots&\vdots\\ a_{n}^n&a_{n}^{n-1}b_n&...&a_nb_n^{n-1}&b_n^n\\ a_{n+1}^n&a_{n+1}^{n-1}b_{n+1}&...&a_{n+1}b_{n+1}^{n-1}&b_{n+1}^n \end{array}\right|
\]
每行都提出 \(a_i^n\) 即可
\[D_n=\prod_{i=1}^{n+1}a_i^n\cdot \left|\begin{array}{cccc} 1& \frac{b_1}{a_1}&... &\left(\frac{b_1}{a_1}\right)^{n-1}&\left(\frac{b_1}{a_1}\right)^{n}\\ 1&\frac{b_2}{a_2}&...&\left(\frac{b_2}{a_2}\right)^{n-1}&\left(\frac{b_2}{a_2}\right)^{n}\\ \vdots&\vdots&\ddots&\vdots&\vdots\\ 1&\frac{b_n}{a_n}&...&\left(\frac{b_n}{a_n}\right)^{n-1}&\left(\frac{b_n}{a_n}\right)^{n}\\ 1&\frac{b_{n+1}}{a_{n+1}}&...&\left(\frac{b_{n+1}}{a_{n+1}}\right)^{n-1}&\left(\frac{b_{n+1}}{a_{n+1}}\right)^{n} \end{array}\right|
\]
这就是经典范德蒙德型行列式了,所以
\[\begin{align}D_n&=\prod a_i^n \cdot \prod_{1\le i<j\le n+1}\left(\frac{b_j}{a_j}-\frac{b_i}{a_i} \right)=\prod a_i^n \cdot \prod_{1\le i<j\le n+1}\frac{a_ib_j-b_ia_j}{a_ia_j}\\&=\prod_{1\le i<j\le n+1} (a_ib_j-b_ia_j)\end{align}
\]