LGV 引理 & Matrix Tree 定理 & BEST 定理

LGV 引理

一个带权 DAG 上,对于某个起点序列 $A_k$ 和终点序列 $B_k$,称一组不相交路径 $S$ 为 $k$ 条路径 $A_i\to B_{\sigma_S(i)}$ 构成的集合,满足路径间两两没有公共点,其中 $\sigma_S$ 是与 $S$ 相关的一个 $k$ 阶排列。

定义一条路径 $p$ 的权值 $\omega(p)$ 为路径上所有边的边权乘积。$e(u,v)$ 表示 $u$ 到 $v$ 的所有路径的边权之和。那么有

$$\displaylines{\sum_{S}(-1)^{\tau(\sigma_S)}\prod_{i=1}^k\omega(S_k)= \begin{vmatrix}e(A_1,B_1)&e(A_1,B_2)&\cdots&e(A_1,B_k)\\ e(A_2,B_1)&e(A_2,B_2)&\cdots&e(A_2,B_k)\\ \vdots&\vdots&\ddots&\vdots\\ e(A_k,B_1)&e(A_k,B_2)&\cdots&e(A_k,B_k)\end{vmatrix} }$$

其中 $\tau(\sigma_S)$ 表示 $\sigma_S$ 的逆序对数。

称左式 $\sum$ 内的部分为 $S$ 的权值。根据行列式定义,右式计算的是所有 $k$ 条路径 $A_i\to B_{\sigma_S(i)}$ 构成的路径组的权值之和,而左式是其中路径两两无公共点的路径组的权值之和。

对于一个相交的路径组 $S$,我们找出图上编号最小的出现在至少两条路径中的点 $u$,找经过它的路径中编号最小的两条边,交换它们 $u$ 以后的部分。因为交换一个排列的两个位置,排列的逆序对数奇偶改变,所以我们构造出了一个贡献完全相反的路径组 $S'$。

而且不难发现对 $S'$ 进行相同的构造可以得到 $S$,所以实际上我们获得了所有路径有相交的路径组的一组匹配,且这个匹配内相对的路径组贡献相反。所以所有路径有相交的路径组的贡献总和是 $0$。

而对于有向网格图,$A_i$ 均在第一行,$B_i$ 均在最后一行这样的只有满足 $\sigma_S(i)=i$ 的路径组 $S$ 不相交的情形,LGV 引理算出来的即 $k$ 条不相交路径 $A_i\to B_i$ 构成的路径组的权值和。

todo

FWT - 快速沃尔什变换

对于任意两个长为 $N=2^m$ 的数列 $a,b$,令

$$\displaylines{c_i=\sum_{i=p\oplus q}a_pb_q }$$

欲构造可逆线性变换 $\mathcal F_m$,对于所有 $i\in[0,N)$ 满足

$$\displaylines{\mathcal F_m(c)_i=\mathcal F_m(a)_i\cdot\mathcal F_m(b)_i }$$

我们考察 $\mathcal F$ 的矩阵表达 $T$,将 $a,b,c$ 写作列向量 $\mathbf{a,b,c}$,即

$$\displaylines{(T\mathbf c)_i=(T\mathbf a)_i(T\mathbf b)_i }$$

再展开得

$$\displaylines{\begin{aligned} (\sum_jT_{i,j}c_j)&=(\sum_jT_{i,j}a_j)(\sum_jT_{i,j}b_j)\\ \sum_{p,q}T_{i,p\oplus q}a_pb_q&=\sum_{p,q}T_{i,p}T_{i,q}a_pb_q \end{aligned}}$$

为了让 $\mathcal F$ 对于任意的 $a,b$ 都满足这样的性质,每项 $a_pb_q$ 前的系数都要相等,即对于任意 $i,p,q$ 都有

$$\displaylines{T_{i,p\oplus q}=T_{i,p}T_{i,q} }$$

不难发现 $T$ 的每一行都由这样一个方程组限制:

$$\displaylines{\begin{cases} x_{p\oplus q}=x_px_q&\forall p,q\in[0,N) \end{cases} }$$

为了使得 $\mathcal F$ 可逆,我们需要对该方程组求出 $N$ 组线性无关的解。


首先有 $x_0^2=x_0$,解得 $x_0$ 为 $0$ 或 $1$。由于 $x_0=0$ 会导致所有 $x_i$ 都为 $0$,与任意一组解皆线性相关,舍去。

然后有 $x_i^2=x_0=1$,解得 $x_i=\pm1$。于是 $f(i)=x_i$ 为 $(S,\oplus)$ 到 $(\{0,\pm1\},\times)$ 两个线性空间之间的同态,其中 $S$ 表示在 $[0,N)$ 内的自然数。

于是我们取出 $(S,\oplus)$ 的一组基,指定集合中每个元素的 $x$ 值后即可得到每个位置的解。简单起见,我们指定

$$\displaylines{T_{i,2^j}=\begin{cases} 1&(\left\lfloor\frac i{2^j}\right\rfloor\bmod2=0)\\ -1&(\left\lfloor\frac i{2^j}\right\rfloor\bmod2=1)\\ \end{cases} }$$

$\left\lfloor\frac i{2^j}\right\rfloor\bmod2$ 即 $i$ 二进制下第 $j$ 位上的数字。

通过观察不难发现,$T_{i,j}$ 的值即为 $(-1)^{\mathrm{popcount}(i\operatorname{AND}j)}$,其中 $i\operatorname{AND}j$ 表示按位与,$\mathrm{popcount}$ 表示二进制下 $1$ 的个数。

更进一步地,按照 $i,j$ 的二进制下第 $m-1$ 位分类讨论,可以将 $T_{i,j}$ 划分为四个方阵。可以看出 $\mathcal F_m$ 的矩阵表示 $T$ 与 $\mathcal F_{m-1}$ 的矩阵表示 $A$ 存在一定关系:

$$\displaylines{T=\begin{bmatrix} A&A\\A&-A \end{bmatrix} }$$

因此求 $\mathcal F_m(a)$ 也可以依此递归进行,将 $a$ 等分成两份 $a_0,a_1$,于是 $\mathcal F_m(a)$ 的前半部分为 $\mathcal F_{m-1}(a_0)+\mathcal F_{m-1}(a_1)$,后半部分为 $\mathcal F_{m-1}(a_0)-\mathcal F_{m-1}(a_1)$。这里的加减表示序列对应位置相加减后得到一个新序列。

为了求 $T$ 的逆,我们进行消元:

$$\displaylines{\left[\begin{array}{cc|cc}A&A&1&0\\A&-A&0&1\end{array}\right] \rightarrow\left[\begin{array}{cc|cc}A&A&1&0\\0&-2A&-1&1\end{array}\right] \rightarrow\left[\begin{array}{cc|cc}A&0&\frac12&\frac12\\0&-2A&-1&1\end{array}\right] \rightarrow\left[\begin{array}{cc|cc}1&0&\frac12A^{-1}&\frac12A^{-1}\\0&1&\frac12A^{-1}&-\frac12A^{-1}\end{array}\right] }$$

$$\displaylines{T^{-1}=\frac12\begin{bmatrix}A^{-1}&A^{-1}\\A^{-1}&-A^{-1}\end{bmatrix} }$$

此时

$$\displaylines{T_{i,j}=\frac{(-1)^{\mathrm{popcount}(i\operatorname{AND}j)}}{2^n} }$$

也即得到了 $\mathcal F$ 的逆变换。

[CF1662C] European Trip

如果没有不能相邻两次走同一条边的限制,可以直接矩阵快速幂。对于这样的限制,整体地考虑所有路径,进行容斥亦不现实。

所以回归矩阵乘法做图上路径计数的本质——动态规划。

设 $f_t(i,j)$ 为 $i\to j$ 长为 $t$,且不走回头路的路径数量,那么对于 $t\ge3$ 有递推式

$$\displaylines{f_t(i,j)=\sum_k f_{t-1}(i,k)f(k,j)-(d_j-1)f_{t-2}(i,j) }$$

其中 $d_i$ 等于 $i$ 的度。那么令矩阵 $G_t$ 第 $i$ 行第 $j$ 列为 $f_t(i,j)$,$G_1=G$ 即为原图邻接矩阵,上式等同于

$$\displaylines{G_t=G_{t-1}G-(D-I)G_{t-2} }$$

其中 $D=\mathrm{diag}(d_1,d_2,\cdots,d_n)$。不难发现上式可以矩阵加速:

$$\displaylines{\begin{bmatrix}O&I\\I-D&G\end{bmatrix} \begin{bmatrix}G_{t-2}\\G_{t-1}\end{bmatrix} =\begin{bmatrix}G_{t-1}\\G\end{bmatrix} }$$

矩阵套矩阵,喵喵题。

[NOI2020] 美食家

对图的邻接矩阵应用矩阵乘法,限制路径上的边数做计数/最优化时,相当于每条边的边权为 $1$。但此时图具有边权,所以考虑把每条边拆成一条长为边权的链。这样点最多有 $(w-1)m+n$ 个,无法接受。于是我们考虑把从同一个点出发的边拆成的链进行合并。具体地,从每个点 $u$ 引出一条长为 $w$ 的链,然后从链上相应的节点连向 $u$ 的后继 $v$。

邻接矩阵做矩阵乘法需要记录边权,而此题需要对点权求最值。所以将每条边的边权定义为终点的点权,节点 $1$ 的点权单独统计。

美食节的处理看作点权修改,也即边权修改,快速幂过程中对于具有修改的时刻进行特殊处理即可。

[Luogu4007] 小 Y 和恐怖的奴隶主

期望 DP,只维护合法的状态。

每次询问暴力做矩阵快速幂会超时,所幸,对于所有询问,要做快速幂的矩阵是相同的,并且我们只需要向量乘矩阵幂后的结果。所以可以预处理出快速幂所需要的中间量,即 $A^{2^k}$ 处的取值,快速幂就只需 $\log n$ 次向量乘矩阵,时间开销由 $O(Tm^3\log n)$ 优化为 $O(m^3\log n+Tm^2\log n)$。

矩阵总结

问题形式

  • 递推式较大项求值
  • 动态 DP
  • 图上计数/最优化

做法

  • 递推式 & 动态 DP:求出系数矩阵,利用矩阵快速幂进行计算,或使用线段树动态维护
  • 图上计数:邻接矩阵的 $k$ 次幂,表示两点间长度为 $k$ 的路径条数。
  • 矩阵树定理。

事实上可以通过快速幂优化的不只有一般的矩阵乘法,将矩阵乘法中的 $+$ 和 $\times$ 替换为运算 $\oplus$ 和 $\otimes$,只要求 $\otimes$ 具有结合律、$\oplus$ 具有交换律、$\otimes$ 对 $\oplus$ 具有分配律,也可以类似地计算。

矩阵乘法一般不具有交换律,实现时应当注意乘法顺序。

典例

[ABC236G] Good Vertices

求某个点到所有点的经过恰好 $L$ 条边的最小瓶颈路长度。

对邻接矩阵定义广义矩阵乘法 $\circ$:

$$\displaylines{(A\circ B)_{i,j}=\min_k\{\max(A_{i,k},B_{k,j})\} }$$

不难发现 $({A^k})_{i,j}$ 表示点 $i$ 到 $j$ 的长为 $k$ 的瓶颈路长度。