行列式与矩阵树定理
行列式与矩阵树定理
行列式的定义
行列式(\(\mathrm{Determinant}\)) 是一个函数定义, 取值是一个标量。
对于一个 \(n \times n\) 的矩阵 \(A\), 它的行列式写作 \(\mathrm{det}(A)\) 或 \(|A|\), 定义为 :
\(\sum\limits_{p}(-1)^{\tau(p)}\prod\limits_{i=1}^{n}a_{i,p_i}\)
\(p\) 表示一个 \(1 \dots n\) 的排列, \(\tau(p)\) 表示 \(p\) 的逆序对个数。
行列式的性质
- 互换矩阵的两行或两列, 行列式的值取反。
- 互换矩阵的一行和一列, 行列式的值不变。
- 矩阵某一行(一列)的值 \(\times k\), 行列式的值 \(\times k\)。
- 如果矩阵 \(A\) 的某一行(列)是另外两个矩阵 \(B\) , \(C\) 的此行(列)的和, \(B, C\) 其他元素与 \(A\) 相同, 则 \(\mathrm{det}(A) = \mathrm{det}(B) + \mathrm{det}(C)\)。
- 如果矩阵两行(列)互为比例关系, 则 \(\mathrm{det}(A) = 0\)。
- 把矩阵的一行全部乘上一个数再加在另一行, \(\mathrm{det}(A)\) 不变。
代数余子式
在一个 \(n\) 阶行列式 \(D\) 中选出 \(k\) 行 \(k\) 列组成一个 \(k\) 阶子行列式。
删除在 \(k\) 行 \(k\) 列后剩下的行列式记作 \(n - k\) 阶余子式。
设 \(A\) 在 \(D\) 中原来的元素行下标有集合\(\mathbb{I=\{i_1,i_2 ,\dots ,i_k\}}\) 列下标有集合\(\mathbb{ J=\{j_1,j_2 ,\dots ,j_k\}}\),则有 \(\displaystyle(-1)^{\displaystyle(i_1+i_2+\dots+i_k)(j_1+j_2+\dots+j_k)}\times \det(M)\) 为 \(n\) 阶行列式 \(D\) 的 \(k\) 阶子式 \(A\) 的代数余子式。
对于单一元素 \(a_{i, j}\), 我们令其代数余子式为 \(A_{i, j}\), 余子式为 \(M_{i, j}\)。
行列式求值
由于性质 6, 直接用高斯消元把矩阵消成只剩主对角线, 此时 \(\mathrm{det}(A)\) 等于所有元素的乘积。但由于在消元中交换了行, 由于性质 1, 还要再记录交换的次数。
矩阵树定理
给定一个无向无权图 \(G\), 设 \(D\) 为度数矩阵, 当 \(i = j\) 时, $D_{i, j} $ 等于点 \(i\) 的度数, \(i \neq j\) 时, \(D_{i, j} = 0\)。
设邻接矩阵 \(A\), \(A_{i, j}\) 表示 \(i, j\) 之间的边的条数。
定义图 \(G\) 的 基尔霍夫 \(\mathrm{Kirchhoff}\) 矩阵 \(C = D - A\)。
矩阵树定理 : \(G\) 的所有不同的生成树的个数等于 \(C\) 中任何一个 \(n - 1\) 阶主子式的行列式的绝对值。
当图是有向时,只用把度数的定义改成入度即可。
例题 :
题意 : 给定图 \(G\), 求所有生成树的价值, 其中价值定义为 :
\(val(T) = \sum\limits_{i=1}^{n - 1}w_i \times \gcd(\sum\limits_{i=1}^{n - 1}w_i)\)
设 \(\gcd(\sum\limits_{i=1}^{n-1}w_i) = S\)。
首先一坨 \(\gcd\) 可以欧拉反演或莫比乌斯反演掉。
\(S=\sum\limits_{d|S}\varphi(d)\), 相当于所有 \(S\) 的倍数的边权做一次矩阵树。
但是本题要求生成树的权值之和, 而普通的是计算乘积。
我们把一条边看成一个一次多项式 \(F(x) = 1 + kx\), 其中 \(k\) 是这条边的权值。
不难发现多项式乘起来之后的一次项 \(G(x)[1] = \sum\limits_{e}w_e\)。
多项式怎么求逆 ? 设原多项式为 \(a +bx\), 则我们要求一个 \(c+dx\) 使得 \((a+bx)(c+dx) = 1 (\mod(x^2))\)
简单拆一下可得 \(ac = 1, bc +ad = bd = 0\), 显然 $c = a^{-1}, d = -b \cdot a^{-1} \cdot a^{-1} = -b \cdot a^{-2} $。
所以逆等于 \((a^{-1}, -ba^{-2})\)。
LGV引理
引理介绍 :LGV 引理(Lindstrom-Gessel-Viennot lemma),可以求解 DAG 上不相交路径条数,定理内容如下:
对于一张有向无环图,每条边有权重 \(w(e)\),\(P_{a,b}\) 为一条 \(a\) 到 \(b\) 的路径,权值为这条路径上边权的乘积。
对于起点构成的集合 \(A\) 和终点构成的集合 \(B\), 满足 \(|A| = |B|\) 且 \(A \cap B = \emptyset\), 记 \(e_{x, y}\) 表示所有 \(A_x \to B_y\) 的路径权值之和,设矩阵
$M = \begin{bmatrix} e(1, 1) \ \ \ e(1, 2) \ \dots \ \ \ e(1, n) \\ e(2, 1) \ \ \ e(2, 2) \ \dots \ \ \ e(2, n) \\ \vdots \ \ \ \ \ \ \ \ \ \ \ \vdots \ \ \ \ \ \ \ \ \ \ddots \ \ \ \ \ \ \vdots \\ e(n,1) \ \ \ \ e(n,2) \ \dots \ \ \ e(n, n)\end{bmatrix} $
则 LGV 的内容为 :\(\det M = \sum\limits_{p}(-1)^{\tau(p)}C(p)\), 其中 \(p\) 为 \(1 \sim n\) 的排列,\(C(p)\) 表示有多少个由 \(n\) 条路径构成的 \(n\) 元组 \((P_1, P_2, \dots, P_n)\), 满足 \(P_i\) 为 \(A_i \to B_{p_i}\) 的路径,而且 \(P_i, P_j\) 两两不交。
证明:考虑把 \(C(p)\) 有交的路径和 \(C(p)\) 无交的路径分开考虑。当一个 \(C(p)\) 有交时,设 \(i, j\) 为字典序最小的满足 \(P_i\) 和 \(P_j\) 有交的路径,设 \(i\) 对应的终点为 \(p_i\), \(j\) 为 \(p_j\), 我们考虑交换 \(p_i,p_j\),此时 \(P_i\) 和 \(P_j\) 仍然有交,但逆序对奇偶性改变。而且交换 \(p_i, p_j\) 后的路径集合中字典序最小相交路径仍然为 \(i, j\), 故改路径集合与交换 \(p_i, p_j\) 后的路径两两抵消,只剩下路径无交的权值。
结合图例更好理解(图片来自 @王鲲鹏 ,,侵删歉):
交换前的 \(i, j\):
交换后的 \(i, j\):
LG P6657 【模板】LGV 引理
容易得知本题的边权 \(w(e) = 1\), \(e_{x, y} = \dbinom{b_y - a_x+n - 1}{n - 1}\), 而且按照 \(a\) 和 \(b\) 排序过后,一定是 \(a_i = b_i\) 匹配的情况,即不会出现 \(i < j, a_i\) 和 \(b_j\) 的情况,这种情况一定会相交。
于是直接对矩阵 \(M_{i, j} = \dbinom{b_j - a_i + n - 1}{n - 1}\) 求出它的行列式即可。 复杂度 \(O(n^3)\)。
[NOI2021] 路径交点
首先这个有偶数个交点比奇数个交点多多少...懂得都懂是行列式。
而本题的关键结论是对于两个起点 \(s_i, s_j\), 其对应的终点 \(t_{p_i}, t_{p_j}\), 它们整个路径交点奇偶性与 \(p_i, p_j\) 的逆序对奇偶性相同。
证明也是很简单的,我们只要类比数学上的零点定理即可。
此题仍然是求方案数,于是 \(w(e) = 1\), 而从 \(s_i\) 到 \(t_j\) 的路径条数显然可以通过 BFS / 矩阵乘法求得。
最后求一遍 \(\det\) 即可, 时间复杂度 \(O(n^4)\)。
CF348D Turtles
可以看做两个起点分别为 \((1, 2)\) 和 \((2, 1)\), 终点为 \((n - 1, m)\) 和 \((n, m - 1)\) 的不相交路径条数,这道题中 \(|S|\) 和 \(|T|\) 只有二,行列式直接算。