首页 > 其他分享 >【模板】图的计数相关:行列式及求值、Matrix-Tree 定理、BEST 定理、LGV 引理

【模板】图的计数相关:行列式及求值、Matrix-Tree 定理、BEST 定理、LGV 引理

时间:2023-07-21 19:45:37浏览次数:54  
标签:end Matrix 定理 矩阵 mu vmatrix 行列式 Theorem 求值

归类为线性代数、图论。证明都是神仙,特别是名字带“理”的,不证了。

行列式

定义

行列式(Determinant)是对 \(n\) 阶方阵 \(A\) 定义的,是一个标量。\(A\) 的 \(n\) 阶行列式 \(det(A)\) 或 \(|A|\) 定义如下:

\[det(A)=\sum_p(-1)^{\mu(p)}\prod_{i}A[i][p_i]. \]

这里将排列的逆序对数定义为了 \(\mu(p)\),\(p\) 是排列,枚举所有排列,每一行挑一个乘起来,拿逆序对相关的东西做系数。

排列奇偶性

Lemma 1. 对于排列 \(p\),交换 \(p_i,p_j\)(其中 \(1\leq i,j\leq n,i\neq j\)),\(\mu(p)\) 的奇偶性改变。
Proof. 假设 \(i<j\),令 \(l=j-i\)。先将 \(a_j\) 调至 \(a_i\) 前,考虑这一步操作的影响。原来 \(a_j\) 与 \(a_{[i,j)}\) 的组合,顺序对设为 \(a\) 个,逆序对设为 \(b\) 个,那么 \(a+b=l\),现在将 \(a_j\) 调至 \(a_i\) 前,顺序对变为 \(b\) 个,逆序对变为 \(a\) 个,所以变化量 \(a-b\equiv a-b+2b\equiv a+b\equiv l\pmod 2\)。再将 \(a_i\) 调至原来 \(a_j\) 的位置,变化量与 \(l-1\) 同奇偶,那么总的变化量是 \(l+l-1\equiv 1\pmod 2\)。

行列式性质

Theorem 1. 单位矩阵的行列式为 \(1\),上三角矩阵、下三角矩阵(对角线下/上全零的矩阵)的行列式为对角线乘积。
Proof. 考虑选数乘起来的过程,如果不选零,那么归纳发现只有一种选法,就是选对角线。

Theorem 2. 交换两行,行列式变号。
Proof. 对于每个排列,这个交换两行只会影响 \(\mu(p)\) 的奇偶性,由 Lemma 1 得 \(\mu(p)\) 奇偶性改变,所以 \((-1)^{\mu(p)}\) 全部变号,行列式变号。

Theorem 3. 某一行乘以 \(t\),行列式值乘以 \(t\)。
Proof. 因为每行只选一个数进行乘积。

Theorem 4. \(\begin{vmatrix}a_1+a_2&b_1+b_2\\c&d\end{vmatrix}=\begin{vmatrix}a_1&b_1\\c&d\end{vmatrix}+\begin{vmatrix}a_2&b_2\\c&d\end{vmatrix}\)
Proof. 乘法分配律。

Theorem 4,5 合起来是行的线性性。

Theorem 5. 有两行相同,行列式为 \(0\)。
Proof. 如果交换这两行,行列式应该变号,但是方阵还是那个方阵,行列式的值应该没有改变。

Theorem 6. 用一行的倍数加到另一行,行列式不变。
Proof. 相当于 \(\begin{vmatrix}a&b\\c&d\end{vmatrix}=\begin{vmatrix}a&b\\c+ka&d+kb\end{vmatrix}\)。
由 Theorem 4 得 \(\begin{vmatrix}a&b\\c+ka&d+kb\end{vmatrix}=\begin{vmatrix}a&b\\c&d\end{vmatrix}+\begin{vmatrix}a&b\\ka&kb\end{vmatrix}\)。
右边那个对第二行乘 \(\frac{1}{k}\),行列式值变为 \(0\),所以右边那个的行列式为 \(0\)。

行列式求值

Theorem 2,3,6 就是高斯消元用的三种操作,所以对方阵高斯消元,消成上三角矩阵,取其对角线乘积即可。

实现时如果模意义下,没有逆元可用,可以辗转相除消元,参考实现:

点击查看代码
const int P=998244353;
LL mod(LL x){return (x%P+P)%P;}
void red(LL&x){x=mod(x);}
LL det(vector<LL>*a,int n){
	LL res=1;
	for(int i=0;i<n;i++) for(LL&x:a[i]) x=mod(x);//最好是正数
	for(int i=0;i<n;i++){
		for(int j=i+1;j<n;j++){
			while(a[i][i]){//最好是 a[i][i],因为下面有个除法
				LL r=a[j][i]/a[i][i];
				for(int k=i;k<n;k++) red(a[j][k]-=a[i][k]*r);
				swap(a[i],a[j]),res=-res;
			}
			swap(a[i],a[j]),res=-res;
		}
	}
	for(int i=0;i<n;i++) red(res*=a[i][i]);
	return mod(res);
}

矩阵树定理

矩阵树定理(Matrix Tree Theorem)被用来计数无向图或有向图的生成树个数。前置条件:图中没有自环。

经典

一个无向无权图,取出它的邻接矩阵 \(A\),度数矩阵 \(D\)(意思是 \(D[i][i]\) 是点 \(i\) 连接的边的条数,其他地方是零)。

则基尔霍夫(Kirchhoff)矩阵为:\(K=D-A\)。

随意选择 \(k\),去掉 \(K\) 中的第 \(k\) 行和第 \(k\) 列,得到 \(K'\),则 \(det(K')\) 为原图的生成树数量。

扩展

对于无向图,如果说边有边权,然后对所有生成树的边权之积求和,我们看作是有边权条重边(默认边权为正),邻接矩阵 \(A[i][j]\) 就变为 \(i\to j\) 有多少条边,度数矩阵 \(D[i][i]\) 就变成点 \(i\) 的边权之和。

有向图生成树分两种情况:

  • 根向树,这种生成树的每条边都从儿子指向父亲。(部分说法是内向树)
  • 外向树,这种生成树的每条边都从父亲指向儿子。

处理方法如下:邻接矩阵不变,度数矩阵含义换一下。根向树的度数矩阵是每个点的出度外向树的度数矩阵是每个点的入度

另外有向图还有根的问题,这里的结论是:去掉哪一行、哪一列,根就是谁。

另一类:边权求和

求所有生成树的边权之和之和。

第一种做法是枚举边,先算一遍有这条边的生成树有多少个,再算一遍没有这条边的生成树有多少个,两个相减得到经过这条边的生成树个数,然后乘上它自己的边权。

第二种做法是,将每条边的边权,原来是 \(w\),现在改成 \(wx+1\) 这个二项式,最后取行列式的一次项系数。
因为注意到乘法:\((ax+c)(bx+d)\equiv(ad+bc)x+cd\pmod{x^2}\),就是说乘起来之后系数的变化是加。
而且这个二项式的除法很容易:\((ax+1)^{-1}\equiv ax-1\pmod {x^2}\)。
除法的另一种:\(\frac{ax+c}{bx+d}=\frac{(ax+c)(bx-d)}{b^2x^2-d^2}=\frac{abx^2+(bc-ad)x-cd}{b^2x^2-d^2}\),这个除法很烦,我们对 \(x^2\) 取模,那么就 \(=\frac{c}{d}-\frac{bc-ad}{d^2}x\)。
加减法和普通多项式一样了。这样就能一次算出所有。

有一说一,这样将乘法转化为加法的技巧,除了 \([x^1](ax+1)(bx+1)\) 还有 \(\ln e^xe^y\)。不要忘了。

BEST 定理

BEST 定理,值得注意的是 BEST 分别是四个人的名字而不是“最好的”,用于对有向图欧拉回路计数。可以数出互不循环同构的欧拉回路条数。
前置条件注意:必须存在欧拉回路(\(inn_i=out_i\)),必须有至少一条边,必须连通。

它的形式为:有向图 \(G\) 的欧拉回路条数为 \(T\prod_{x\in V}(deg_x-1)!\)。其中 \(T\) 是任意一点为根的根向生成树个数,可以证明任意一个答案都相同。由于出度等于入度,因此这里的 \(deg_x\) 是入度和出度随便取一个。

如果题目钦定了起点 \(s\),这里注意答案要乘上 \(deg_s\),因为对于一个欧拉回路,\(s\) 在里面的出现次数明显是 \(deg_s\)。因为它们循环同构了,所以我们强行不让它循环同构,从 \(deg_s\) 个 \(s\) 里面选一个作为欧拉回路开始。
如果题目的边是不区分的,这时又要注意,BEST 定理算出来的边是有区分的,我们除一下重边条数的阶乘即可。
如果题目是无向图,需要钦定一下边的方向。

LGV 引理

LGV 引理,用于计算:在有向无环图上不相交路径的数量/权值和。

具体地,设起点们 \(A=\{a_1,a_2,\cdots,a_n\}\),终点们 \(B=\{b_1,b_2,\cdots,b_n\}\)。然后当然有个 DAG。然后定义一条路径 \(P\) 的权值是边权之积 \(w(P)\)。
定义:\(e(i,j)\) 表示 \(i\) 到 \(j\) 的所有路径的权值,\(e(i,j)=\sum_{P:i\to j}w(P)\)。
一组不相交路径 \(S=\{P_1,P_2,\cdots,P_n\}\),表示 \(P_i:A_i\to B_{\sigma(i)}\),这里的 \(\sigma(i)\) 是一个排列,一个 \(S\) 对应一个 \(\sigma\)(如果合法的话)。\(S\) 中的路径必须没有公共点。

LGV 引理的结论是:

\[det(\begin{bmatrix} e(A_1,B_1)&e(A_1,B_2)&\cdots&e(A_1,B_n)\\ e(A_2,B_1)&e(A_2,B_2)&\cdots&e(A_2,B_n)\\ \vdots&\vdots&\ddots&\vdots\\ e(A_n,B_1)&e(A_n,B_2)&\cdots&e(A_n,B_n) \end{bmatrix})=\sum_{S:A\to B}(-1)^{\mu(\sigma(S))}\prod_{i=1}^n w(P_i).\]

这里的 \(S\) 必然是不相交路径,否则不算进去。\(\sigma(S)\),改个定义是 \(S\) 对应的排列 \(\sigma\)。\(\mu\) 是排列逆序对数,老朋友了。

如果有:“只要路径两两不相交,那么每个起点 \(A_i\) 只能到达和它对应的那个终点 \(B_i\)” 这一限制的话,那么就可以忽略掉公式中 \((-1)^{\mu(\sigma(S))}\) 这一项了。因为此时任意一组不相交路径的方案,对应的排列 \(P\) 都是 \(1,2,3,⋯n\),也就是没有逆序对。但是如果没有上面那个限制,比如说 NOID1T2,第一层的第 \(i\) 个点最终不一定会走到最后一层的第 \(i\) 个点,那么就要考虑那个 \(-1\) 的次数带来的影响,这一题就是发现交点个数的奇偶性和最终起终点排列逆序对数的奇偶性相同,所以直接用 LGV 引理。——Luogu@AK_Dream

例题

洛谷题号吧,洛谷的模板题和题解还是很行的。

题解没有必要了,该讲的在上面都有。

标签:end,Matrix,定理,矩阵,mu,vmatrix,行列式,Theorem,求值
From: https://www.cnblogs.com/caijianhong/p/17571788.html

相关文章

  • 题解 POJ3318【Matrix Multiplication】
    postedon2022-10-2119:56:08|under题解|sourceproblem判断三个\(n\timesn\)的矩阵是否满足\(A\timesB=C\),\(n\leq500\)。solution随机一个行向量\(v\)。若\(a\timesb=c\),则有\(v\timesa\timesb=v\timesc\)(不充分)。显然相乘复杂度仅为\(O(n^2)\)。类似于......
  • 博弈论部分定义及定理
    一.公平组合游戏ICG:定义为:1.有两名玩家交替行动2.在游戏进行的任意时刻,可以执行的合法行动与轮到哪位玩家无关3.不能行动的玩家判负二.mex运算定义为:\(mex(S)=min\{x\}(x\inN,x\notinS)\)即为不属于集合\(S\)的最小非负整数。三.有向图游戏定义:给定一个有向无......
  • Burnside定理和Polya计数
    置换群Burnside定理和Polya计数都需要运用置换群的知识置换群主要有三种运算,分别是合成运算、恒等置换、置换的逆运用着三种运算就可以推导出Burnside定理和Polya计数的公式Burnside定理Burnside定理的主要应用是循环排列计数、项链计数、正五角形着色等下面给出一道例题P......
  • 裴蜀定理
    定理二元一次方程\(ax+by=c\)的有解条件是\(\gcd(a,b)\midc\)。证明设\(s=\gcd(a,b)\),所以\(s\mida\),并且\(s\midb\)。又因为\(x,y\)为整数,所以\(s\midax,s\midby\)。如果要使式子成立,则\(c\)一定是\(s\)的倍数。所以\(s\midc\),\(\gcd(a,b)\midc\)。......
  • LeetCode 519. Random Flip Matrix 哈希Map
    Thereisanmxnbinarygridmatrixwithallthevaluesset0initially.Designanalgorithmtorandomlypickanindex(i,j)wherematrix[i][j]==0andflipsitto1.Alltheindices(i,j)wherematrix[i][j]==0shouldbeequallylikelytobereturne......
  • 拓展中国剩余定理(excrt)
    由于exCRT完美的平替了CRT的全部功能,故不再详细复习CRT的相关内容.考虑如下同余方程组,\[\begin{cases}x\equiva_1\pmod{m_1}\\x\equiva_2\pmod{m_2}\\\end{cases}\]展开得,\[a_1+k_1\timesm_1=a_2+k_2\timesm_2\]\[\Rightarrowk_1\timesm_1-k_2\ti......
  • 【真·随笔】矩证乘法的基本定理(修复)
    此随笔是修复版,请尊重原创。修复版markdown见下修复自矩阵乘法笔记-Elegia:https://www.luogu.com.cn/blog/EntropyIncreaser/ju-zhen-sheng-fa-bi-ji矩阵乘法的基本定理矩阵乘法结合律设有矩阵\(A,B,C\),分别的大小为\(n\timesm,m\timesp,p\timesq\)。求证......
  • 卢卡斯定理
     卢卡斯定理的原式:C(n,r)modm=C(n1,r1)*C(n2,r2)*......*C(nk,rk)modm卢卡斯定理的变式:C(n,r)modm=C(nmodm,rmodm)*C(n/m,r/m)modm卢卡斯定理的时间复杂度很低,接近O(n)下面给出一道例题P3807【模板】卢卡斯定理/Lucas定理代码:#include<bits/stdc++.h>#def......
  • P4139(扩展欧拉定理的应用)
    欧拉定理及扩展题意:求思路:运用扩展欧拉定理进行欧拉降幂:然后递归求解即可。AC代码://-----------------//#pragmaGCCoptimize(2)#include<iostream>#include<cstring>#include<algorithm>#defineIOSios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0)......
  • 二项式定理和杨辉三角
     杨辉三角解法1:dfs使用记忆化搜索,提升dfs效率代码:intdfs(intn,intm){ if(!m)returnc[n][m]=1; if(m==1)returnc[n][m]=n; if(c[n][m])returnc[n][m]; if(n-m<m)m=n-m; returnc[n][m]=(dfs(n-1,m)+dfs(n-1,m-1))%mod;}解法2:递推时间复杂度O(n^2),如果......