LGV 引理

图论 / lgv

本地源文件:docs/graph__lgv.md

LGV 引理

简介

Lindström–Gessel–Viennot lemma,即 LGV 引理,可以用来处理有向无环图上不相交路径计数等问题.

前置知识:图论相关概念 中的基础部分、矩阵高斯消元求行列式

LGV 引理仅适用于 有向无环图

定义

𝜔(𝑃)ω(P) 表示 𝑃P 这条路径上所有边的边权之积.(路径计数时,可以将边权都设为 11)(事实上,边权可以为生成函数)

𝑒(𝑢,𝑣)e(u,v) 表示 𝑢u 到 𝑣v每一条 路径 𝑃P 的 𝜔(𝑃)ω(P) 之和,即 𝑒(𝑢,𝑣) =∑𝑃:𝑢→𝑣𝜔(𝑃)e(u,v)=∑P:u→vω(P)

起点集合 𝐴A,是有向无环图点集的一个子集,大小为 𝑛n

终点集合 𝐵B,也是有向无环图点集的一个子集,大小也为 𝑛n

一组 𝐴 →𝐵A→B 的不相交路径 𝑆S:𝑆𝑖Si 是一条从 𝐴𝑖Ai 到 𝐵𝜎(𝑆)𝑖Bσ(S)i 的路径(𝜎(𝑆)σ(S) 是一个排列),对于任何 𝑖 ≠𝑗i≠j,𝑆𝑖Si 和 𝑆𝑗Sj 没有公共顶点.

𝑡(𝜎)t(σ) 表示排列 𝜎σ 的逆序对个数.

引理

𝑀=⎡⎢ ⎢ ⎢ ⎢⎣𝑒(𝐴1,𝐵1)𝑒(𝐴1,𝐵2)⋯𝑒(𝐴1,𝐵𝑛)𝑒(𝐴2,𝐵1)𝑒(𝐴2,𝐵2)⋯𝑒(𝐴2,𝐵𝑛)⋮⋮⋱⋮𝑒(𝐴𝑛,𝐵1)𝑒(𝐴𝑛,𝐵2)⋯𝑒(𝐴𝑛,𝐵𝑛)⎤⎥ ⎥ ⎥ ⎥⎦M=[e(A1,B1)e(A1,B2)⋯e(A1,Bn)e(A2,B1)e(A2,B2)⋯e(A2,Bn)⋮⋮⋱⋮e(An,B1)e(An,B2)⋯e(An,Bn)]det⁡(𝑀)=∑𝑆:𝐴→𝐵(−1)𝑡(𝜎(𝑆))𝑛∏𝑖=1𝜔(𝑆𝑖)det⁡(M)=∑S:A→B(−1)t(σ(S))∏i=1nω(Si)

其中 ∑𝑆:𝐴→𝐵∑S:A→B 表示满足上文要求的 𝐴 →𝐵A→B 的每一组不相交路径 𝑆S

证明

由行列式定义可得

det⁡(𝑀)=∑𝜎(−1)𝑡(𝜎)𝑛∏𝑖=1𝑒(𝑎𝑖,𝑏𝜎(𝑖))=∑𝜎(−1)𝑡(𝜎)𝑛∏𝑖=1∑𝑃:𝑎𝑖→𝑏𝜎(𝑖)𝜔(𝑃)det⁡(M)=∑σ(−1)t(σ)∏i=1ne(ai,bσ(i))=∑σ(−1)t(σ)∏i=1n∑P:ai→bσ(i)ω(P)

观察到 𝑛∏𝑖=1∑𝑃:𝑎𝑖→𝑏𝜎(𝑖)𝜔(𝑃)∏i=1n∑P:ai→bσ(i)ω(P),实际上是所有从 𝐴A 到 𝐵B 排列为 𝜎σ 的路径组 𝑃P 的 𝜔(𝑃)ω(P) 之和.

∑𝜎(−1)𝑡(𝜎)𝑛∏𝑖=1∑𝑃:𝑎𝑖→𝑏𝜎(𝑖)𝜔(𝑃)=∑𝜎(−1)𝑡(𝜎)∑𝑃=𝜎𝜔(𝑃)=∑𝑃:𝐴→𝐵(−1)𝑡(𝜎)𝑛∏𝑖=1𝜔(𝑃𝑖)∑σ(−1)t(σ)∏i=1n∑P:ai→bσ(i)ω(P)=∑σ(−1)t(σ)∑P=σω(P)=∑P:A→B(−1)t(σ)∏i=1nω(Pi)

此处 𝑃P 为任意路径组.

设 𝑈U 为不相交路径组,𝑉V 为相交路径组,

∑𝑃:𝐴→𝐵(−1)𝑡(𝜎)𝑛∏𝑖=1𝜔(𝑃𝑖)=∑𝑈:𝐴→𝐵(−1)𝑡(𝑈)𝑛∏𝑖=1𝜔(𝑈𝑖)+∑𝑉:𝐴→𝐵(−1)𝑡(𝑉)𝑛∏𝑖=1𝜔(𝑉𝑖)∑P:A→B(−1)t(σ)∏i=1nω(Pi)=∑U:A→B(−1)t(U)∏i=1nω(Ui)+∑V:A→B(−1)t(V)∏i=1nω(Vi)

设 𝑃P 中存在一个相交路径组 𝑃𝑖 :𝑎1 →𝑢 →𝑏1,𝑃𝑗 :𝑎2 →𝑢 →𝑏2Pi:a1→u→b1,Pj:a2→u→b2,则必然存在和它相对的一个相交路径组 𝑃′𝑖 =𝑎1 →𝑢 →𝑏2,𝑃′𝑗 =𝑎2 →𝑢 →𝑏1Pi′=a1→u→b2,Pj′=a2→u→b1,𝑃′P′ 的其他路径与 𝑃P 相同.可得 𝜔(𝑃) =𝜔(𝑃′),𝑡(𝑃) =𝑡(𝑃′) ±1ω(P)=ω(P′),t(P)=t(P′)±1

因此我们有 ∑𝑉:𝐴→𝐵( −1)𝑡(𝜎)𝑛∏𝑖=1𝜔(𝑉𝑖) =0∑V:A→B(−1)t(σ)∏i=1nω(Vi)=0

则 det⁡(𝑀) =∑𝑈:𝐴→𝐵( −1)𝑡(𝑈)𝑛∏𝑖=1𝜔(𝑈𝑖)det⁡(M)=∑U:A→B(−1)t(U)∏i=1nω(Ui)

证毕1.

例题

例 1 CF348D Turtles

题意:有一个 𝑛 ×𝑚n×m 的格点棋盘,其中某些格子可走,某些格子不可走.有一只海龟从 (𝑥,𝑦)(x,y) 只能走到 (𝑥 +1,𝑦)(x+1,y) 和 (𝑥,𝑦 +1)(x,y+1) 的位置,求海龟从 (1,1)(1,1) 到 (𝑛,𝑚)(n,m) 的不相交路径数对 109 +7109+7 取模之后的结果.2 ≤𝑛,𝑚 ≤30002≤n,m≤3000

比较直接的 LGV 引理的应用.考虑所有合法路径,发现从 (1,1)(1,1) 出发一定要经过 𝐴 ={(1,2),(2,1)}A={(1,2),(2,1)},而到达终点一定要经过 𝐵 ={(𝑛 −1,𝑚),(𝑛,𝑚 −1)}B={(n−1,m),(n,m−1)},则 𝐴,𝐵A,B 可立即选定.应用 LGV 引理可得答案为:

∣𝑓(𝑎1,𝑏1)𝑓(𝑎1,𝑏2)𝑓(𝑎2,𝑏1)𝑓(𝑎2,𝑏2)∣=𝑓(𝑎1,𝑏1)×𝑓(𝑎2,𝑏2)−𝑓(𝑎1,𝑏2)×𝑓(𝑎2,𝑏1)|f(a1,b1)f(a1,b2)f(a2,b1)f(a2,b2)|=f(a1,b1)×f(a2,b2)−f(a1,b2)×f(a2,b1)

其中 𝑓(𝑎,𝑏)f(a,b) 为图上 𝑎 →𝑏a→b 的路径数,带有障碍格点的路径计数问题可以直接做一个 𝑂(𝑛𝑚)O(nm) 的 dp,则 𝑓f 易求.最终复杂度 𝑂(𝑛𝑚)O(nm)

参考代码

---|---

例 2 [HDU 5852 Intersection is not allowed!](https://acm.hdu.edu.cn/showproblem.php?pid=5852)

题意:有一个 𝑛 ×𝑛n×n![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 的棋盘,一个棋子从 (𝑥,𝑦)(x,y)![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 只能走到 (𝑥,𝑦 +1)(x,y+1)![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 或 (𝑥 +1,𝑦)(x+1,y)![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7),有 𝑘k![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 个棋子,一开始第 𝑖i![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 个棋子放在 (1,𝑎𝑖)(1,ai)![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7),最终要到 (𝑛,𝑏𝑖)(n,bi)![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7),路径要两两不相交,求方案数对 109 +7109+7![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 取模.1 ≤𝑛 ≤1051≤n≤105![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7),1 ≤𝑘 ≤1001≤k≤100![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7),保证 1 ≤𝑎1 <𝑎2 <⋯ <𝑎𝑛 ≤𝑛1≤a1<a2<⋯<an≤n![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7),1 ≤𝑏1 <𝑏2 <⋯ <𝑏𝑛 ≤𝑛1≤b1<b2<⋯<bn≤n![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7).

观察到如果路径不相交就一定是 𝑎𝑖ai![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 到 𝑏𝑖bi![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7),因此 LGV 引理中一定有 𝜎(𝑆)𝑖 =𝑖σ(S)i=i![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7),不需要考虑符号问题.边权设为 11![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7),直接套用引理即可.

从 (1,𝑎𝑖)(1,ai)![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 到 (𝑛,𝑏𝑗)(n,bj)![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 的路径条数相当于从 𝑛 −1 +𝑏𝑗 −𝑎𝑖n−1+bj−ai![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 步中选 𝑛 −1n−1![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 步向下走,所以 𝑒(𝐴𝑖,𝐵𝑗) =(𝑛−1+𝑏𝑗−𝑎𝑖𝑛−1)e(Ai,Bj)=(n−1+bj−ain−1)![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7).

行列式可以使用高斯消元求.

复杂度为 𝑂(𝑛 +𝑘(𝑘2 +log⁡𝑝))O(n+k(k2+log⁡p))![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7),其中 log⁡𝑝log⁡p![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 是求逆元复杂度.

参考代码

---|---

参考资料

  1. 证明来源于 知乎 - LGV 引理证明
本页面最近更新: 2026/1/30 21:35:24,更新历史 发现错误?想一起完善?在 GitHub 上编辑此页! 本页面贡献者:Tiphereth-A, Enter-tainer, Ir1d, ouuan, c-forrest, chenyichen0420, Cidoai, H-J-Granger, HeRaNO, kenlig, lxdlam, memset0, Menci 本页面的全部内容在CC BY-SA 4.0SATA 协议之条款下提供,附加条款亦可能应用