线性代数

Gauss-Jordan 求解逆矩阵。


行列式求值,其中 \(P\) 是排列,\(\pi(P)\) 是逆序对数。

\[\det(A)=\sum_{P}(-1)^{\pi(P)}\prod_{i=1}^{n}a_{i,p_i} \]

另一种递归式定义:

\[\det(A)=\sum_{j=1}^{n}a_{i,j}A_{i,j}=\sum_{i=1}^{n}a_{i,j}A_{i,j} \]

注意到 gauss 消元后形成一个上三角矩阵,而该矩阵的行列式很好算,即 \(\prod a_{i,i}\)。由于 gauss 消元过程中都是初等行变换,考虑计算变换后行列式的变化。

  • 交换两行,行列式乘以 \(-1\)
  • 一行乘以 \(k\),行列式乘以 \(k\)
  • 一行乘以 \(k\) 加到另一行,行列式不变。
int det(int n){
	int res=1;
	for(int i=2;i<=n;i++){
		int r=i;
		for(int j=i+1;j<=n;j++)if(a[j][i]>a[r][i])r=j;
		if(!a[r][i])continue;
		if(r!=i){
			res=-res;
			for(int j=i;j<=n;j++)swap(a[i][j],a[r][j]);
		}
		for(int j=i+1;j<=n;j++){
			while(a[j][i]){
				int d=a[i][i]/a[j][i];res=-res;
				for(int k=i;k<=n;k++)a[i][k]=mod(a[i][k]+p-(ll)d*a[j][k]%p),swap(a[i][k],a[j][k]);
			}
			//有逆时直接乘逆元也行 
		}
	}
	if(res<0)res+=p;
	for(int i=2;i<=n;i++)if(a[i][i])res=(ll)res*a[i][i]%p;
	return res;
}

LGV 引理。


Tutte 矩阵。

考虑设计矩阵 \(G\)

对于 \(i\le j\),如果 \(i\)\(j\) 有边,那么 \(G_{i,j}=x_{i,j}\)\(G_{j,i}=-x_{i,j}\)。否则 \(G_{i,j}=G_{j,i}=0\)

结论:\(\det(G)\ne 0\) 等价于图存在完美匹配。

证明可以考虑 \(\det(G)\) 的定义

\[\det(G)=\sum_{P}(-1)^{\pi(P)}\prod_{i=1}^{n}G_{i,p_i} \]

如果该式存在贡献,那么对于 \(\forall i\)\(i\)\(p_i\) 必然有边,产生贡献的边形成了若干个环。

注意到如果这些环中有奇环,那么把环翻转后 \((-1)^{\pi(P)}\) 恰好取反,因此奇环的两种情况抵消。

所以只需要考虑只有偶环的情况。此时每个偶环内的点必然存在匹配。而如果存在匹配,那么这些点两两成环必然合法。证毕。

考虑怎么求最大匹配,大胆猜测:答案是 \(\frac{rank(G)}{2}\)。证明忘了,时间复杂度 \(O(n^3)\)

线性基

将长度为 \(n\) 的序列映射到长度为 \(\log V\) 的序列上。使其子集的异或集合相等。

可以 \(O(\log V)\) 插入,\(O(\log^2 V)\) 合并。通常解决子集异或问题,求 \(k\) 大的时候需要先通过线性变换使得任意 \(a,b\in S\) 满足 \(a\oplus b\ge\max(a,b)\)

通常搭配 \(O(1)\) 合并的数据结构如 st 表。

可删线性基离线可做到 \(O(\log V)\),记录每个数的删除时间,每次插入从高位到低位贪心地选择最晚删除的数。在线 \(O(\log^2 V)\)https://www.luogu.com.cn/article/vd9qdrcd。

Matrix-Tree 定理

对于有向图 \(G\),定义

  • 出度矩阵

    \[D^{\text{out}}_{i,j}(G)=\left\{\begin{matrix} \deg^{\text{out}}(i) & i=j \\ 0 & i\ne j \end{matrix}\right. \]

  • 邻接矩阵,设 \(\#e(i,j)\)\(i\) 连向 \(j\) 的边数。

    \[A_{i,j}(G)=\left\{\begin{matrix} 0 & i=j \\ \#e(i,j) & i\ne j \end{matrix}\right. \]

  • 出度 Laplace 矩阵

    \[L^{\text{out}}(G)=D^{\text{out}}(G)-A(G) \]

入度类似。于是有以 \(k\) 为根的内向生成树数量 \(t^{\text{root}}(G,k)\) 和外向生成树数量 \(t^{\text{leaf}}(G,k)\)

\[t^{\text{root}}(G,k)=\det L^{\text{out}}(G)_{[n]\setminus\{k\},[n]\setminus\{k\}}\\ t^{\text{leaf}}(G,k)=\det L^{\text{in}}(G)_{[n]\setminus\{k\},[n]\setminus\{k\}} \]

相当于将第 \(k\) 行第 \(k\) 列去掉后行列式的值。


定义 \(m\times n\) 的关联出度矩阵 \(M^{out}\)

\[M^{out}_{i,j}=\left\{\begin{matrix} 1 & u_i=j \\ 0 & i\ne j \end{matrix}\right. \]

同理得到关联入度矩阵。

简单推导可得 \(D^{out}=(M^{out})^{T}M^{out}\)\(A=(M^{out})^TM^{in}\)。所以有 \(L^{out}=(M^{out})^T(M^{out}-M^{in})\)

引理:

对于图 \(G(V,E)\),如果子图 \(T(V,S)\) 是以 \(V\setminus W\) 为根的内向森林,当且仅当

\[\det(M^{out}_{S,W})\det(M^{out}_{S,W}-M^{in}_{S,W})\ne 0 \]

通过分析可以知道,\(M^{out}_{S,W}\) 每行至多有一个 \(1\),当 \(\det(M^{out}_{S,W})\ne 0\) 时即代表每行恰好一个 \(1\) 且每一列恰好一个 \(1\),或者说 \(W\) 中每个点与 \(S\) 中一条边的起点形成双射,也可以说它们出度都为 \(1\)

前半部分限制出度为 \(1\),那么后半部分应该限制无环。当前面不为 \(0\) 时,\(M^{out}_{S,W}-M^{in}_{S,W}\) 每行每列恰有一个 \(1\),但是可能有 \(1\)\(0\)\(-1\)。如果存在环,容易发现通过若干次一行加到另一行上最终会使得一行为 \(0\),又由于该操作不改变行列式,故原行列式也为 \(0\),如

\[\begin{vmatrix} 1 & -1 & 0 & 0\\ 0 & 1 & -1 & 0\\ 0 & 0 & 1 & -1\\ -1 & 0 & 0 & 1 \end{vmatrix} \]

并且当该式不为 \(0\) 时,可以通过该操作使得每行有且仅有一个 \(1\),则此时 \(\det(M^{out}_{S,W}-M^{in}_{S,W})=\det(M^{out}_{S,W})\)。所以原式也 \(=\det(M^{out}_{S,W})^2=1\)


Cauchy–Binet 公式:

对于 \(n\times m\) 的矩阵

\[\det(AB)=\sum_{S\subset [m],|S|=n}\det A_{[n],S}\det B_{S,[n]} \]

联立引理可证明矩阵树定理,令 \(W=[n]\setminus\{k\}\)

\[\begin{aligned} \det L^{\text{out}}(G)_{W,W}&=\det ((M_{V,W}^{out})^T(M_{V,W}^{out}-M_{V,W}^{in}))\\ &=\sum_{S\subset[m],|S|=n-1}\det (M^{out}_{S,W})\det(M_{W}^{out}-M_{V,W}^{in})\\ &=\sum_{S\subset[m],|S|=n-1}[S 是原图以k为根的生成树] \end{aligned} \]

扩展

带边权。会发现实际上算的是所有生成树边权乘积的和。

因为将关联矩阵重定义为

\[M^{out}_{i,j}=\left\{\begin{matrix} \sqrt{w_i} & u_i=j \\ 0 & i\ne j \end{matrix}\right. \]

则引理算出来的行列式即为 \(\prod w_i\)


求所有生成树边权\(k\) 次方的和。

只需要把乘法变成加法,容易想到类似于原根的东西。

相当于将矩阵中的元素变成一个多项式,重定义加减乘除。对于本题来说,有

\[(f\otimes g)(i)=\sum_{j=0}^{i}\binom{i}{j}f(j)g(i-j)\\ (f\oplus g)(i)=f(i)+g(i) \]

或者也可以理解为已知 \(w=w_1+w_2+\cdots w_{k-1}\)\(0\sim k\) 次方,求 \((w+w_k)\)\(0\sim k\) 次方。

答案就是 \(\det(k)\)

应用

Cayley 公式

\(n\) 个点的完全图生成树数量为 \(n^{n-2}\),写出 Laplace 矩阵,用行列式知识可以得到。

Best 定理

对于一个有向欧拉图,其不同欧拉回路的数量为

\[\text{ec}(G)=t^{\text{root}}(G,k)\prod_{u\in V}(\deg(u)-1)! \]

由于欧拉图出度和入度相等,所以令 \(\deg(u)=\deg^{\text{out}}(u)=\deg^{\text{in}}(u)\)。只用考虑固定从 \(k\) 出发。

容易发现,由欧拉回路的性质,如果每个点除 \(k\) 外都取最后一条出边,则会构成一棵树。如果成环,意味着一个点在走完最后一条出边后还走了它的入边,显然不会构成欧拉回路。

于是每条欧拉回路都能对应一棵以 \(k\) 为根的内向树,除了树上的边外,其他边的顺序不固定,可以得到 \(t^{\text{root}}(G,k)\deg(k)!\prod_{u\in V,u\ne k}(\deg(u)-1)!\),但是 \(k\) 会在路径中出现 \(\deg(k)\) 次,所以一条路径会计算 \(\deg(k)\) 次,去重后便得到上式。

可以感性理解方案与欧拉回路间构成双射。

posted @ 2025-04-01 16:46  _chara  阅读(37)  评论(0)    收藏  举报
Title