行列式与矩阵树定理

行列式与矩阵树定理

行列式的定义

行列式(\(\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\) 的逆序对个数。

行列式的性质

  1. 互换矩阵的两行或两列, 行列式的值取反。
  2. 互换矩阵的一行和一列, 行列式的值不变。
  3. 矩阵某一行(一列)的值 \(\times k\), 行列式的值 \(\times k\)
  4. 如果矩阵 \(A\) 的某一行(列)是另外两个矩阵 \(B\) , \(C\) 的此行(列)的和, \(B, C\) 其他元素与 \(A\) 相同, 则 \(\mathrm{det}(A) = \mathrm{det}(B) + \mathrm{det}(C)\)
  5. 如果矩阵两行(列)互为比例关系, 则 \(\mathrm{det}(A) = 0\)
  6. 把矩阵的一行全部乘上一个数再加在另一行, \(\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\) 阶主子式的行列式的绝对值。

当图是有向时,只用把度数的定义改成入度即可。

例题 :

[省选联考 2020 A 卷] 作业题

题意 : 给定图 \(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\)

p2p9qmk6

交换后的 \(i, j\)

0d84mct2

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|\) 只有二,行列式直接算。

posted @ 2021-12-07 13:24  henrici3106  阅读(329)  评论(0编辑  收藏  举报