LGV 引理、Cauchy-Binet 定理、Matrix-Tree 定理、BEST 定理
尽管有的证明较为繁琐,学习它们也很有意义。摘一段大佬的博客里的话:
为什么要写这个证明呢?周围很多人认为比较浪费时间,一般不考。然而输入感知定理其中的智慧,不仅对于图论、线性代数有了更深入的了解,还可以为思维注入一些新鲜血液,因此对我个人而言不全是浪费时间之举。
——《Matrix Tree 定理及证明》
一些定义和公式的写法抄自网上的博客,向大佬们道声谢。
还没完成的:学习矩阵树定理的容斥证明。
符号约定
\(\sigma(p)\) 表示排列 \(p\) 中的逆序对数。
LGV 引理
疑问:LGV 引理是边权还是点权、能否描述无公共边?LGV 引理为何要在 DAG 上?
用于统计 DAG 上不相交(路径两两无公共点/无公共边)路径的权值和,实质上描述了行列式的图论意义。
称一条路径 \(P\) 的权值为 \(w(P)\),通常定义作边权或点权之积,或 \(1\);这个定义有限制,见构造双射的步骤。分别有 \(n\) 个起点 \(A_1,A_2,\ldots,A_n\) 和 \(n\) 个终点 \(B_1,B_2,\ldots,B_n\),定义一个路径组 \(S=\{P_1,P_2,\ldots,P_n\}\),其中 \(P_i:A_i\to B_{p(S)_i}\),\(p(S)\) 是一个排列。定义路径组的权值 \(w(S)=\prod_{i=1}^nw(P_i)\),意义由 \(w(P)\) 决定,可以是所有路径的点权/边权之积,或总方案数。另定义 \(e(u,v)=\sum_{P:u\to v}w(P)\)。
LGV 引理:对于 \(n\times n\) 的矩阵 \(M\),其中 \(M_{i,j}=e(A_i,B_j)\),有:
即:
证明:
我们充分发扬乘法分配律。
接下来构造双射,使用 \((-1)^{\sigma(p(S))}\) 这一容斥系数消掉带相交的路径组。记相交的路径对 \(P_i,P_j\) 为 \((i,j) \ (i<j)\),对于相交路径组 \(S\),找到字典序最小的 \((i,j)\),再找到 \(P_i,P_j\) 最早的交点/公共边。将该交点/公共边之后的两段路径交换,得到新的路径组 \(f(S)\)。显然有 \(f(f(S))=S\),那么 \(S\) 与 \(f(S)\) 一一对应。\(w(P)\) 的定义要满足 \(w(S)=w(f(S))\);交换后容斥系数多乘或多除了 \(-1\)。于是有:
理解
双射和容斥解决了后半部分的转化,而前半部分的行列式是快速计算的手段。
特殊情况:\(\sigma(p(S))>0\Rightarrow S\) 中路径有交,例如网格图上的两排点(起点、终点)顺次编号。此时计算的是 \(\sum_{S 中路径无交, \sigma(p(S))=0}w(S)\),即确定了起点和终点的配对关系。
一般情况:把 \(i,p_i\) 分别排成两排(都从小到大),把边 \(i\to p_i\) 画在纸上,可以发现交点数等于逆序对数。那么 LGV 引理算的就是交点数(逆序对数)为偶数的权值和/方案数 \(-\) 交点数为奇数的权值和/方案数。
Cauchy-Binet 定理
\(A\times B \text{ problem.}\)(大雾)
有 \(n\times m\) 矩阵 \(A\) 和 \(m\times n\) 矩阵 \(B\),记 \(A[S]\) 表示矩阵 \(A\) 保留所有行、编号在 \(S\) 中的所有列,\(B[S]\) 表示矩阵 \(B\) 保留所有列、编号在 \(S\) 中的所有行,那么:
其实还有 \((\det A[S])\cdot(\det B[S])=\det(A[S]B[S])\)。
若 \(m<n\),则 \(\det(AB)=0\)。
证明:
LGV 引理给出了一种组合视角的证明。现在有 \(3\) 列点,分别有 \(n,m,n\) 个。第 \(1\) 列点连向第 \(2\) 列点,\(i\to j\) 的边权为 \(A_{i,j}\);第 \(2\) 列点连向第 \(3\) 列点,\(j\to k\) 的边权为 \(B_{j,k}\);都没有重边;边权为 \(0\) 表示无边,原因之后易得。定义路径的权值为边权之积,路径相交为有公共点,现在要计算第 \(1\) 列点到第 \(3\) 列点的路径组 \(T\) 的以下式子:
其中 \(\operatorname{QwQ}(T)\) 表示将路径组 \(T\) 画在纸上,边的交点的个数。
视角 \(1\):独立考虑第 \(1\) 列点到第 \(2\) 列点的路径、第 \(2\) 列点到第 \(3\) 列点的路径,它们仅由第 \(2\) 列点中使用的点集 \(S\) 关联(枚举点集 \(S\)),又有乘法分配律,于是答案为:
视角 \(2\):直接考虑第 \(1\) 列点到第 \(3\) 列点的路径。
此时要求不交,构造 LGV 引理中的矩阵 \(M\)。这可以在 DAG 上 DP 求出,更直接的做法是矩阵乘法:\(M=AB\)。
再考虑系数 \((-1)^{\cdots}\),注意到两条路径每交叉一次(指在某一层上相对上一层形成逆序对),(当前结尾层相对开头层)这两条路径“是否形成逆序对”一定会变,那么两条路径最终“是否形成逆序对”和交叉次数的奇偶性相同(奇则是逆序对),于是最终第 \(3\) 层相对第 \(1\) 层的逆序对数奇偶性就是总交点个数的奇偶性。
那么得出结论,答案为:
最后说一下:\(m<n\) 显然无解,于是答案为 \(0\)。
理解
Cauchy-Binet 定理本身给出了矩阵乘积的行列式与其本身(可能是取一部分)的行列式的关系。
实际应用中,我目前见过两种:
- 上面的证明及下面的扩展,表示在如此分层的 DAG 上统计路径。核心:枚举集合 \(S\)、拼合两个(乃至多个)部分。
- 在 Matrix-Tree 定理中,用于枚举生成树的边集 \(S\),也用于修正贡献和限制多个条件。核心:枚举集合 \(S\)、乘积。
扩展
上面证明中的问题,\(2\) 层是直接用 LGV 引理,\(3\) 层是 Cauchy-Binet 定理,那么 \(k \ (k\geq2)\) 层呢?首先确定限制:设第 \(i\) 层的点数为 \(n_i\),保证 \(n_1=n_k=n\)(记它们为 \(n\))。
发现上面的各种结论可以接着用,这里不再赘述,记第 \(i\) 层到第 \(i+1\) 层的边权矩阵为 \(A_i\),矩阵 \(M\) 仅保留 \(S\) 中的行和 \(T\) 中的列为 \(M[S,T]\),得到式子:
(根据 nkp 的建议,可以用乘法分配率 + \(\prod\) 写得简洁一些,可能计算的复杂度也更小。)
意义:枚举除了首尾层的层中选哪些点。若存在 \(n_i<n\),则显然无解,答案为 \(0\)。
题:P7736 [NOI2021] 路径交点。当时看 OI-wiki 发现 Cauchy-Binet 定理可以用此题中的组合意义证,觉得证明太长没敢看,结果做这题时学了题解的不同做法后想到了,不知道和 OI-wiki 上的证明方法是否一样。
Matrix-Tree 定理
疑问:边反向就能搞内向树?
梦开始的地方。她可能是我活到现在见过证明最妙的定理。
Matrix-Tree 定理用于统计无向图的生成树个数/权值和,或有向图的外向/内向生成树个数/权值和。
无向图
先捋一遍证明步骤:先证明图的关联矩阵的行列式的图论意义,再通过 Cauchy-Binet 定理+转置 枚举生成树边集并修正贡献,最后得到两矩阵相乘所得矩阵各位置的值。
图的关联矩阵
一张无向图的关联矩阵 \(M\) 是一个 \(n\times m\) 的矩阵(点数 \(\times\) 边数),每行代表一个点,每列代表一条边。对于每条边 \((u,v)\),我们随意为它定向,现在就都是有向边了。对于编号为 \(i\) 的边 \(u\to v\),我们令 \(M_{u,i}=-1,M_{v,i}=1,M_{\text{others},i}=0\),这就是这张图的关联矩阵。
关联矩阵取出一部分的行列式有结论:取出 \(M\) 的任意 \(n-1\) 行和 \(n-1\) 列(编号构成集合 \(S\))得到矩阵 \(M_0[S]\),则当取出的边形成树(认定根为删去的那一行所代表的点,当然由于是无向图,选哪个点作为根都无所谓)时其行列式为 \(1\) 或 \(-1\),否则其行列式为 \(0\)。
需要注意的是“删去根”并不删去与之相连的边。
证明:
- 对于不是树的 \(n-1\) 条边,一定存在环(简单环、不是简单环都行;存在简单环等价于存在环),那么取出环上的边所代表的列向量,可以使它们的线性组合为 \(\vec0\),即它们线性相关,那么行列式为 \(0\)。注意这里要分类讨论环是否包含根,因为删去了根所在行。
- 而如果是树,则可以先找一个叶子结点,它所在行上只有一个非 \(0\) 数,而这个数所在列除它外只有一个非 \(0\) 数。那么用这一行消掉另一个非 \(0\) 数,并剔除这一行一列,继续这个过程。那么会诞生新的叶子结点,一直到根的子结点。此时求整个矩阵(包括原来剔除的行列)的行列式,发现所有非 \(0\) 数的坐标构成排列,那么行列式唯一,且为 \(\pm1\)。
现在回头看,为什么要删掉根呢?因为这样使矩阵成为方阵,从而有行列式;另外,这还让其他结点最终都变成“叶子结点”的状态。
蜕柿子
我们要干两件事:枚举边集、将树的贡献从 \(\pm1\) 修正为 \(1\)。巧妙的做法:将 \(M_0\)(\(M\) 随意去掉一行)与 \(M_0^T\)(\(M_0\) 的转置)套进 Cauchy-Binet 定理。
我们知道转置不改变行列式,于是有:
\((\pm1)^2=1\),搞定啦!
拉普拉斯(基尔霍夫)矩阵
直接将 \(M_0M_0^T\) 相乘仍嫌费事,且复杂度较高,考虑推导它们相乘的结果。记矩阵 \(L=MM^T\),这个矩阵 \(L\) 就是拉普拉斯矩阵(也可以记作 \(K\),基尔霍夫矩阵)。
现在来看一个矩阵乘它的转置发生了什么:固定原矩阵的两行(或同一行),将每一列处的乘积加起来;或者拿转置后的矩阵说,列和行反过来;这就做了一个“内积”。
可以观察到重边是被允许的,但要注意它对 \(\deg\) 和 \(-\operatorname{cnt}\) 的贡献。自环本身就无意义,在关联矩阵里也会被抵消,于是在 \(L\) 中不添加自环(直接省略)。
然而我们要的是 \(M_0M_0^T\),不是 \(MM^T\)。用同样的方法推导,发现 \(L_0=M_0M_0^T\) 就是将 \(L\) 去掉第 \(k\) 行、第 \(k\) 列得到的矩阵,\(k\) 是 \(M\) 中去掉的那一行。
至此,我们得到了一个 \((n-1)\times(n-1)\) 的矩阵 \(L_0\),而它的行列式就是无向图生成树的个数。
有向图
这里只考虑外向树,把所有边反向后跑外向树就是内向树了。
先声明:删掉一行时不能随便删了,删除的点即为根。
明确关联矩阵的定义:与无向图的唯一区别是边已有方向,不手动定向。
\(\det M_0\) 的性质只保证是树,不够用了。考虑引入 \(n\times m\) 的矩阵 \(D\) 来保证除根外每个点的入度都是 \(1\),两个条件拼一起(\(\wedge\))就是外向树了。令 \(D_{i,j}=[i=v] (j:u\to v)\),\(D_0\) 表示 \(D\) 删去根所在行得到的矩阵,那么若剩余所有点入度都是 \(1\),则 \(\det D_0=\pm1\),否则 \(\det D_0=0\)。
接下来有三个要求:枚举边集、\(\wedge\) 条件、修正贡献,将 \(M_0,D_0^T\) 带入 Cauchy-Binet 定理来一步实现。细节:乘法保证了 \(\wedge\)(只有两者都非零时才考虑接下来的修正贡献,此时已经满足外向树的条件),而由于外向树边方向的特殊性质,按上文所述方法消元后的 \(M_0=D_0\),所以贡献为 \((\pm1)^2=1\)。
用上文的方法求 \(L=MD^T\),可以发现:
而可以用同样思路证明 \(L_0=M_0D_0^T\) 即为 \(L\) 去掉根所在行和对应列的结果。
同样地,允许重边(注意对 \(\operatorname{indeg},-\operatorname{cnt}\) 的影响),而直接省略掉自环。
带权
积之和
定义一个生成树的权值为边权之积,求生成树的权值和。
边权是正整数:相当于重边。
一般情况:对于一条边 \(i:(u\to v,w)\)(无向图则随意定向),令 \(M_{u,i}=-\sqrt w,M_{v,i}=\sqrt w,M_{\text{others},i}=0\)。在有向图上,令 \(D_{v,i}=\sqrt w,D_{\text{others},i}=0\)。若有负边权则使用复数。注意到满足条件时行列式为 \(\pm\sqrt{\prod w}\),修正贡献后就是 \(\prod w\)。
\(L\) 跟着变,都改为边权和,尤其要小心度数。
和之和
定义一个生成的权值为边权之和,求生成树的权值和。
和、积转化的方法:\((ax+1)(bx+1)\pmod{x^2}\)、\(a+b=\ln(e^ae^b)\)、\(pqx^{a+b}=px^a\cdot qx^b\)(GF)。
这里采用第一种即可。加减乘都很显然,除法有两种做法:
- 逆元。\({(ax+b)(-ax+b)\over b^2}\equiv1\pmod{x^2}\),故 \(ax+b\) 的逆元为 \(-{a\over b^2}x+{1\over b}\)。
- 直接除。\({ax+b\over cx+d}\equiv{(ax+b)(cx-d)\over-d^2}\equiv{ad-bc\over d^2}x+{b\over d}\pmod{x^2}\)。
求行列式时(听说不能辗转相除):
- 有逆元的充要条件为常数项非 \(0\),所以第 \(i\) 列中(\(\geq i\) 的行)若有常数项非 \(0\) 的应该优先抓出来消元;必定能消完。
- 如果第 \(i\) 列中(\(\geq i\) 的行)没有常数项非 \(0\) 的,就找一个 \(x^1\) 项非 \(0\) 的来消元,此时的除法要特殊处理;必定能消完。
- 再不济就全是 \(0\),那就不用消了,最后乘上去行列式就是 \(0\),也可以直接在此时退出。
正确性:原本的式子是先乘后加,而只需要保证乘的时候常数项为 \(1\),那么最终的常数项即使不是 \(1\) 也不会有问题。
实际计算时就别管乘法的意义了,该乘乘该加加。注意重边应该先叠合,再丢进矩阵。
BEST 定理
疑问:内向树或外向树?
BEST 定理用于统计有向欧拉图中的欧拉回路(且要求经过所有点)个数。
结论 \(1\):令 \(ec(G)\) 表示 \(G\) 中互不循环同构的欧拉回路个数,\(T(G,rt)\) 表示 \(G\) 以 \(rt\) 为根的内向树个数(随意指定一个点为 \(rt\),内向树还是外向树也随意),\(\deg u\) 表示 \(u\) 的入度或出度(由于是有向欧拉图,一个点的入度和出度相等),有下式:
结论 \(2\):以一个点 \(v\) 为起点和终点的欧拉回路个数(允许循环同构)为:
结论 \(3\):有向欧拉图中以每个点为根的内向树个数全部相等。
证明:
我们先来证结论 \(2\)。钦定一个起点(及终点)\(v\),同时令 \(rt=v\)。如此构造一个“组合”:选一棵以 \(v\) 为根的内向树,要求一个点的其他边走完后才能走内向树上的边,即内向树上的边是除 \(v\) 之外的点的最后一条出边;对同一个点的所有不在内向树上的出边定走的先后顺序。那么方案数即为:
证明一个“组合”和一条以 \(v\) 为起点和终点、允许循环同构的欧拉回路一一对应:
- 一个组合对应唯一的回路:显然唯一(规定了怎么走),只需证明路径合法。非 \(v\) 的点每次进入必有出边,而 \(v\) 仅在最后一次进入时没有出边,此时也不需要出边。也就是说需要出边的时候就一定有,而且规定好了怎么走,于是路径合法。
- 一个回路对应唯一的组合:显然唯一(规定了边的顺序),只需证明除 \(v\) 外每个点的最后一条出边构成一棵以 \(v\) 为根的内向树。首先这些边一定不成环(如果有环则一定不包含 \(v\),发现无法回到 \(v\)),而每个点只连一条边出去,就形成了一棵内向树(想象连边的过程,不能往回连,又发现最后弱连通,那只能形成内向树了)。
再考虑外向树,\(3\) 个我没走通的想法:翻转所有边感性理解对称性、钦定每个点的第一条入边、用有向欧拉图性质套进矩阵树定理的结论。事实上可能没有外向树的结论!(或者我还证不来。)
于是“组合”的方案数就是结论 \(2\) 的答案。接下来考虑结论 \(1\),从 \(v\) 的每一条边出发形成的欧拉回路循环同构,于是方案数 \(/\deg_v\) 即可。考虑对每个点 \(v\) 计算结论 \(1\),结果相同,又有后面的 \(\prod\neq0\),那么就说明了无孤立点有向欧拉图中结论 \(3\) 成立,而有孤立点显然生成树个数为 \(0\),故结论 \(3\) 成立。带回结论 \(2\),说明了 \(rt\) 可以随便取。
使用说明
修正方案数:是否考虑循环同构(是否 \(/\deg_v\))、是否重边不区分(大致是除掉各个边数的阶乘,看具体情况)。
无向图:先定向,钦定的影响可以传递。
注意事项:判是否是有向欧拉图、(可能需要)排除孤立点(BEST 定理认为在不弱连通时方案数为 \(0\),但有的题目只要求经过所有边,不要求经过所有点)、处理自环(度数要统计,矩阵树里要忽略)、注意重边对度数的影响、别忘了阶乘。
参考
2025.6.23 & 2025.6.24 & 2025.6.25
浙公网安备 33010602011771号