Loading

LGV 引理和 Martrix-Tree 定理

LGV 引理:

LGV 引理是用来处理 \(n\) 条不相邻路径计数问题。

直接从题目开始讲吧。

P6657 【模板】LGV 引理

P6657 【模板】LGV 引理

我们考虑一种存在交点的方案,两条路径会长成这样。

image

我们考虑构造一个有交路劲到有交路径的双射,找到第一个交点(可以给所有点定义一个拓扑序,例如先行后列,编号从大到小等,找到拓扑序最小的交点),然后将交点以后的两条路径翻转,即上面的两条路径会变成这样。

image

如果我们能让这两种有交路径抵消掉,最后就只会剩下没有交点的路径。

我们考虑构造 \(n\times n\) 的矩阵 \(M\),使得 \(M_{i,j}\) 表示 \((a_i,1)\)\((b_j,n)\) 的路径数量,我们发现 \(M\) 的行列式就是答案。

对于不相交路径,肯定会被计算恰好一次,我们考虑存在交点的路径,根据上面的双射,找出另一条有交路径,由于排列交换两个元素逆序对奇偶性恰好改变,所以两者抵消。

最后只需要求 \(M\) 的行列式即可。

P7736 [NOI2021] 路径交点

P7736 [NOI2021] 路径交点

对于一组路径,设 \(p_i\) 表示第 \(i\) 个起点对应的终点,显然 \(p\) 是个排列。

注意到纸上交点数的奇偶性与 \(p\) 的逆序对奇偶性相同。

如果构造 \(n_1\times n_1\) 的矩阵 \(M\),使得 \(M_{i,j}\) 表示第 \(i\) 个起点到第 \(j\) 个终点的路径方案数。

那么 \(M\) 的行列式会把在点上有交点的路径抵消掉,没有交点的路径会有 \((-1)^{\text{inv}p}\) 的系数,正好是纸上交点数的奇偶性,所以 \(M\) 的行列式正好是答案。

所以 LGV 引理求的是不相交路径的带权和。

CF348D Turtles

CF348D Turtles

两条路径不相交肯定一条走 \((1,2)\to(n-1,m)\),另一条走 \((2,1)\to(n,m-1)\)

直接写 \(2\times 2\) 的矩阵求行列式就行了。

P11704 [ROIR 2025] 旅行路线

P11704 [ROIR 2025] 旅行路线

首先把题目转化成 \((1,2)\to(n-1,m)\)\((2,1)\to(n,m-1)\),两条路径要经过所有关键点且两条路径不相交。

不考虑相交,先将所有的点排序,只要满足后面的点一定不能走到前边的点就行了。

\(f_{i,j}\) 表示现在考虑到第 \(i\) 个关键点,其中一条路径结尾为 \(i\),另一条路径的结尾为 \(j\)

双射一下,就可以把 \((1,2)\to(n-1,m)\)\((2,1)\to(n,m-1)\) 的有交路径一一映射到 \((1,2)\to(n,m-1)\)\((2,1)\to(n-1,m)\) 的路径上。

把两个都求一遍相减就行了。

qoj3082 Ascending Matrix

qoj3082 Ascending Matrix

先不考虑 \(a_{r,c}=v\) 的条件。

一个关键的转化,画一个 \(n\times m\) 的表格,将这个表格横线和竖线的交点标上坐标,分别是 \((0,0),\dots,(n,m)\)

我们把 \(\le i\)\(>i\) 的元素画上分界线,那么分界线肯定是 \((n,0)\to(0,m)\) 的一条路径。

\(k-1\) 条分界线不能有交叉,但是可以有交点,所以我们把第 \(i\) 条分界线往右 & 往下平移 \(i-1\) 个单位。

那就变成了现在有 \(k-1\) 条路径,起点是 \((n+i-1,i-1)\),终点是 \((i-1,m+i-1)\),这 \(k-1\) 条路径互不相交。

这直接用 LGV 引理做就行了。

如果有 \(a_{r,c}=v\) 的条件,那么需要满足有恰好 \(v-1\) 条线在点 \(P(r+v-2,c+v-2)\) 的左上方,且不存在一条线经过 \(P\)

求法就是找中转点 \((x_{P}-d,y_{P}-d),1\le d\le\min(x_{P},y_{P})\) 就行了。

若一条线在 \(P\) 的左上方,那么给他赋 \(x\) 的权值,否则给他赋 \(1\) 的权值,那么求行列式后就是个关于 \(x\) 的多项式,答案就是这个多项式的 \(x^{v-1}\) 项系数。

直接算是 \(O(n^5)\) 或者 \(O(n^4\log n)\) 的,用一个经典 trick,带入 \(k\) 个点值,最后用 Lagrange 插值求出系数,时间复杂度 \(O(n^4)\)

其他题目

P9041 [PA 2021] Fiolki 2

Matrix-Tree 定理

矩阵树定理是用来求图的生成树个数的,无向图就是生成树个数,有向图则分内向树和外向树,而且要确定根。

公式

无向图版本

给出一个无向无权图,设 \(A\) 为邻接矩阵,\(D\) 为度数矩阵,其中 \(D_{i,i}\) 表示 \(i\) 的度数,其他为 \(0\)

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

\(K'\) 为任意一个 \(K\)\(n-1\) 阶主子式,那么 \(K'\) 的行列式就是生成树个数。

有向图版本

设根为 \(i\),需要改变一下度数矩阵 \(D\)\(K'\) 的定义:

  • 若是外向树,此时 \(D\) 定义为入度矩阵,且 \(K'\) 表示 \(K\) 删掉第 \(i\) 行和第 \(i\) 列所有元素的矩阵。
  • 若是内向树,此时 \(D\) 定义为出度矩阵,且 \(K'\) 表示 \(K\) 删掉第 \(i\) 行和第 \(i\) 列所有元素的矩阵。

带权版本

上述定理是可以有重边的,如果把重边看成一条边的系数,那么一个生成树的权值就是生成树所有边的乘积。矩阵树定理就会求出所有生成树的权值和。

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

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

将 gcd 用欧拉反演弄掉,枚举 \(d\) 所有边权是 \(d\) 的倍数的边才能用,注意图要联通,所以至少会有 \(n-1\) 条边是 \(d\) 的倍数,所以合法的 \(d\) 只会有 \(O(\frac{\sum\tau(a_i)}{n})\) 种。

现在的问题是如何快速求出所有生成树的边权和的和。

我们给每条边赋一个 \(wx+1\) 的权值,这样其边权的乘积的 \(x\) 项系数就会得到 \(w\) 的和,由于我们只需要 \(1\) 次项,所以只需要维护多项式 \(\bmod x^2\) 的值,所以求一次就是 \(O(n^3)\) 的。

最终复杂度 \(O(n^2\sum\tau(a_i))\)

CF917D Stranger Trees

CF917D Stranger Trees

考虑一个完全图,原树上的边的权值为 \(x\),其余权值为 \(1\),那么这个图的生成树的权值和的 \(x^k\) 项系数就是公共边数量为 \(k\) 的方案数。

直接带入 \(n\) 个点值,Lagrange 插值求出来就行了,时间复杂度 \(O(n^4)\)

BEST 定理

BEST 定理可以用来求解有向图欧拉回路 / 欧拉路径问题(注意无向图欧拉回路计数是 NP 完全的)。

BEST 定理是通过构造欧拉回路和起点根向树的双射,起点的根向树是可以用矩阵树定理解决的。

证明

直接拿板题来说,P5807 【模板】BEST 定理 / Which Dreamed It

我们构造如下双射,对于根节点 \(1\)(起点),我们保留所有非根节点在欧拉回路里的最后一条边,这会构成一个图。

  • 一个以 \(k\) 为根的根向树形图,由所有非根顶点处的最后一条出边组成,方案数是以 \(1\) 为根的根向树数量;
  • \(1\) 处所有出边的排列顺序,方案数是 \(\deg_1!\)
  • 非根节点 \(v\) 处所有出边除了最后一条边的排列顺序,方案数是 \((\deg_v-1)!\)

接下来我们证明这是一组双射。

首先从后推前,每个点都只会指向在环中更靠后的点所以肯定不会成环,又显然根节点是 \(1\),所以每个欧拉回路可以对应一颗以 \(1\) 为根的根向树。

其次从前推后,直接从 \(1\) 开始按照顺序进行遍历,根据欧拉回路的性质,最后一定能跑出欧拉回路。

所以这道题直接求出以 \(1\) 为根的根向树个数 \(T\),输出 \(T\deg_1!\prod_{i=2}^n(\deg_i-1)!\)

P7531 [USACO21OPEN] Routing Schemes P

P7531 [USACO21OPEN] Routing Schemes P

有与 \(k\) 无关的做法。

考虑建立虚电 \(S\)\(S\) 连向所有发送者,所有接收者连向 \(S\),那么一条欧拉回路就可以推出方案。

但是可能会有多条欧拉回路推出同一组方案,因为 \(S\) 走出边的顺序随意,所以答案要除以 \(\deg_S!\)

AT_agc051_d [AGC051D] C4

AT_agc051_d [AGC051D] C4

虽然无向图欧拉回路计数是 NP 完全的,但是这个图比较特殊,我们考虑枚举 \(S\to T\) 的有向边有几条,所以可以推出其他的所有有向边有几条,有向图欧拉路径计数就可以用 BEST 定理了。

注意重边是可以随便走的但是欧拉回路里会被算作多次,所以还要除以所有重边数量的阶乘。

CF1919E Counting Prefixes

CF1919E Counting Prefixes

可以看作一个数轴,从 \(0\) 开始,每次可以左右移动一个单位,使得每个点经过的次数与给定数组相同。

同样的枚举终点 \(T\),起点显然是 \(S=0\),这样就可以推出每条边的经过次数。

所以要求出这个图的欧拉路径方案树,欧拉路径和欧拉回路是差不多的,以 \(t\) 为根,双射仍然成立,这个图的根向生成树方案数个数是好求的,所以可以做到 \(O(n^2)\)

还是要注意重边。

posted @ 2026-07-30 22:36  liruixiong0101  阅读(23)  评论(0)    收藏  举报