LGV 引理——二维DAG上 n 点对不相交路径方案数
引入
有这样一个问题:
甲和乙在一张网格图上,初始位置 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2) ,分别要走到 ( x 3 , y 3 ) , ( x 4 , y 4 ) (x_3,y_3),(x_4,y_4) (x3,y3),(x4,y4),每次只能水平向右或竖直向下走 1 格,问两个人安排路径使之不相交的方案数。
这个问题我们可以用稍微复杂的容斥做,也可以用类似卡塔兰数两个组合数相减公式的推导方法,我们会发现 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) 到 ( x 4 , y 4 ) (x_4,y_4) (x4,y4) 的路径数乘上 ( x 2 , y 2 ) (x_2,y_2) (x2,y2) 到 ( x 3 , y 3 ) (x_3,y_3) (x3,y3) 的路径数刚好就是路径相交,也就是不合法的方案数,因为这两条路径一定交叉了嘛,所以等价于在第一个交叉位置上甲乙身份互换了,然后跑到对方终点的方案,这和相交的方案数是相等的。
因此答案就为
c
n
t
(
x
1
,
y
1
)
→
(
x
3
,
y
3
)
∗
c
n
t
(
x
2
,
y
2
)
→
(
x
4
,
y
4
)
−
c
n
t
(
x
1
,
y
1
)
→
(
x
4
,
y
4
)
∗
c
n
t
(
x
2
,
y
2
)
→
(
x
3
,
y
3
)
cnt_{(x_1,y_1)\rightarrow(x_3,y_3)}*cnt_{(x_2,y_2)\rightarrow(x_4,y_4)}-cnt_{(x_1,y_1)\rightarrow(x_4,y_4)}*cnt_{(x_2,y_2)\rightarrow(x_3,y_3)}
cnt(x1,y1)→(x3,y3)∗cnt(x2,y2)→(x4,y4)−cnt(x1,y1)→(x4,y4)∗cnt(x2,y2)→(x3,y3)
那么如果甲乙丙丁戊己庚辛壬癸……多达上百人要分别从一个位置到另一个位置,要求路径都不相交呢?
那就只能用 L G V \rm LGV LGV 引理 了。
简介
L i n d s t r o ¨ m – G e s s e l – V i e n n o t l e m m a \rm Lindström–Gessel–Viennot\;lemma Lindstro¨m–Gessel–Viennotlemma,即 L G V \rm LGV LGV 引理,可以用来处理有向无环图(不准确,看下面的释疑)上不相交路径计数等问题。(有向无环图真的可行吗?)
前置知识:图、行列式。
定义
摘自OI Wiki.
ω ( P ) \omega(P) ω(P) 表示 P P P 这条路径上所有边的边权之积。(路径计数时,可以将边权都设为 1 1 1)(事实上,边权可以为生成函数)
e ( u , v ) e(u,v) e(u,v) 表示 u u u 到 v v v 的 每一条 路径 P 的 ω ( P ) \omega(P) ω(P) 之和,即 e ( u , v ) = ∑ P : u → v ω ( P ) e(u,v)=\sum_{P:u\rightarrow v}\omega(P) e(u,v)=∑P:u→vω(P) 。
起点集合 A A A,是有向无环图点集的一个子集,大小为 n n n。
终点集合 B B B,也是有向无环图点集的一个子集,大小也为 n n n。
一组 A → B A\rightarrow B A→B 的不相交路径 S S S: S i S_i Si 是一条从 A i A_i Ai 到 B σ ( S ) i B_{σ(S)_i} Bσ(S)i 的路径( σ ( S ) σ(S) σ(S) 是一个排列),对于任何 i ≠ j i\not= j i=j, S i S_i Si 和 S j S_j Sj 没有公共顶点。
N ( σ ) N(σ) N(σ) 表示排列 σ σ σ 的逆序对个数。
引理
∑ S : A → B ( − 1 ) N ( σ ( S ) ) ∏ i = 1 n ω ( S i ) = ∣ e ( A 1 , B 1 ) e ( A 1 , B 2 ) ⋯ e ( A 1 , B n ) e ( A 2 , B 1 ) e ( A 2 , B 2 ) ⋯ e ( A 2 , B n ) ⋯ ⋯ ⋱ ⋯ e ( A n , B 1 ) e ( A n , B 2 ) ⋯ e ( A n , B n ) ∣ \sum_{S:A\rightarrow B}(-1)^{N(σ(S))}\prod_{i=1}^{n}\omega(S_i)= \begin{vmatrix} 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)\\ \cdots&\cdots&\ddots&\cdots\\ e(A_n,B_1)&e(A_n,B_2)&\cdots&e(A_n,B_n)\\ \end{vmatrix} S:A→B∑(−1)N(σ(S))i=1∏nω(Si)=∣∣∣∣∣∣∣∣e(A1,B1)e(A2,B1)⋯e(An,B1)e(A1,B2)e(A2,B2)⋯e(An,B2)⋯⋯⋱⋯e(A1,Bn)e(A2,Bn)⋯e(An,Bn)∣∣∣∣∣∣∣∣
等式左边即为我们要求的方案数,OI Wiki: ∑ S : A → B \sum_{S:A\rightarrow B} ∑S:A→B 为上文提到的每一组不相交路径 S S S.
可以发现,我们如果用高斯消元求行列式的值,解决这个问题的时间复杂度是 O ( n 3 ) O(n^3) O(n3) 的。
证明
参考维基百科(需要梯子)
翻译一下核心证明公式:(好像不是很核心)
det M = ∑ σ ∈ S n s i g n ( σ ) ∏ i = 1 n e ( a i , b σ ( i ) ) = ∑ σ ∈ S n s i g n ( σ ) ∏ i = 1 n ∑ P i : a i → b σ ( i ) ω ( P i ) = ∑ σ ∈ S n s i g n ( σ ) ∑ { ω ( P ) : P 从 ( a 1 , a 2 , … , a n ) 到 ( b σ ( 1 ) , b σ ( 2 ) , … , b σ ( n ) ) 的 n 条 路 径 } = ∑ { s i g n ( σ ( P ) ) ω ( P ) : P 扭曲的从 ( a 1 , a 2 , … , a n ) 到 ( b 1 , b 2 , . . . , b n ) 的 n 条路径 } = ∑ { s i g n ( σ ( P ) ) ω ( P ) : P 扭曲的从 ( a 1 , a 2 , … , a n ) 到 ( b 1 , b 2 , . . . , b n ) 的 n 条 不相交 路径 } + ∑ { s i g n ( σ ( P ) ) ω ( P ) : P 扭曲的从 ( a 1 , a 2 , … , a n ) 到 ( b 1 , b 2 , . . . , b n ) 的 n 条 存在相交 的路径 } = ∑ ( P 1 , … , P n ) : A → B s i g n ( σ ( P ) ) ω ( P ) + ∑ { s i g n ( σ ( P ) ) ω ( P ) : P 扭曲的从 ( a 1 , a 2 , … , a n ) 到 ( b 1 , b 2 , . . . , b n ) 的 n 条 存在相交 的路径 } ⏟ = 0 ? {\displaystyle {\begin{array}{rcl}\det M&=&\sum _{\sigma \in S_{n}}\mathrm {sign} (\sigma )\prod _{i=1}^{n}e(a_{i},b_{\sigma (i)})\\&=&\sum _{\sigma \in S_{n}}\mathrm {sign} (\sigma )\prod _{i=1}^{n}\sum _{P_{i}:a_{i}\to b_{\sigma (i)}}\omega (P_{i})\\&=&\sum _{\sigma \in S_{n}}\mathrm {sign} (\sigma )\sum \{\omega (P):P~{\text从}~\left(a_{1},a_{2},\ldots ,a_{n}\right)~{\text{到}}~\left(b_{\sigma (1)},b_{\sigma (2)},\ldots ,b_{\sigma (n)}\right)~{\text的}~n~{\text条路径}\}\\&=&\sum \{\mathrm {sign} (\sigma (P))\omega (P):P~{\text{扭曲的从}}~\left(a_{1},a_{2},\ldots ,a_{n}\right)~{\text{到}}~\left(b_{1},b_{2},...,b_{n}\right)~{\text{的}}~n~{\text{条路径}}\}\\&=&\sum \{\mathrm {sign} (\sigma (P))\omega (P):P~{\text{扭曲的从}}~\left(a_{1},a_{2},\ldots ,a_{n}\right)~{\text{到}}~\left(b_{1},b_{2},...,b_{n}\right)~{\text{的}}~n~{\text{条 不相交 路径}}\}\\&&+\sum \{\mathrm {sign} (\sigma (P))\omega (P):P~{\text{扭曲的从}}~\left(a_{1},a_{2},\ldots ,a_{n}\right)~{\text{到}}~\left(b_{1},b_{2},...,b_{n}\right)~{\text{的}}~n~{\text{条 存在相交 的路径}}\}\\&=&\sum _{(P_{1},\ldots ,P_{n})\colon A\to B}\mathrm {sign} (\sigma (P))\omega (P)\\&&+\underbrace {\sum \{\mathrm {sign} (\sigma (P))\omega (P):P~{\text{扭曲的从}}~\left(a_{1},a_{2},\ldots ,a_{n}\right)~{\text{到}}~\left(b_{1},b_{2},...,b_{n}\right)~{\text{的}}~n~{\text{条 存在相交 的路径}}\}} _{=0?}\\\end{array}}} detM======∑σ∈Snsign(σ)∏i=1ne(ai,bσ(i))∑σ∈Snsign(σ)∏i=1n∑Pi:ai→bσ(i)ω(Pi)∑σ∈Snsign(σ)∑{ω(P):P 从 (a1,a2,…,an) 到 (bσ(1),bσ(2),…,bσ(n)) 的 n 条路径}∑{sign(σ(P))ω(P):P 扭曲的从 (a1,a2,…,an) 到 (b1,b2,...,bn) 的 n 条路径}∑{sign(σ(P))ω(P):P 扭曲的从 (a1,a2,…,an) 到 (b1,b2,...,bn) 的 n 条 不相交 路径}+∑{sign(σ(P))ω(P):P 扭曲的从 (a1,a2,…,an) 到 (b1,b2,...,bn) 的 n 条 存在相交 的路径}∑(P1,…,Pn):A→Bsign(σ(P))ω(P)+=0? ∑{sign(σ(P))ω(P):P 扭曲的从 (a1,a2,…,an) 到 (b1,b2,...,bn) 的 n 条 存在相交 的路径}
第一行是行列式的展开式,后面相当于把每种排列都枚举出来,“扭曲的(直译)”表示 a i a_i ai 不一定对应 b i b_i bi,其中的 s i g n ( σ ( P ) ) {\rm sign}(σ(P)) sign(σ(P)) 表示 ( − 1 ) 排列 σ(P) 的逆序数 (-1)^{\text{排列 σ(P) 的逆序数}} (−1)排列 σ(P) 的逆序数 。
那么,在 ( a 1 , a 2 , … , a n ) \left(a_{1},a_{2},\ldots ,a_{n}\right) (a1,a2,…,an) 到 ( b σ ( P ) 1 , b σ ( P ) 2 , … , b σ ( P ) n ) \left(b_{σ(P)_1},b_{σ(P)_2},\ldots,b_{σ(P)_n}\right) (bσ(P)1,bσ(P)2,…,bσ(P)n) 的 n n n 条路径中,这样的一个逆序代表什么?根据引子里的分析,我们不难发现一个逆序的产生就意味着两条路径相交,那么,根据容斥原理,不难发现上式底下那个大括号框出的式子是等于零的了!
例题
不管在有向无环图中是否可行,反正在网格图中是可行的。
下面看这道例题:
英文题解:
释疑
虽然都说是有向无环图适用,但是是事实是,我们会找到很多有向无环图,它们计算出的答案并不正确。
我们会发现一个规律:这些不适用的有向无环图都是三维图。
什么意思呢?也就是我们无法把所有点和边画在平面上,使得边之间不交叉。
这个定理的证明核心,其实是对于两对点 a → b , c → d a\rightarrow b\;,\;c\rightarrow d a→b,c→d ,交换 c c c 和 d d d 后不存在方案合法。如果是三维图的话,它们可以绕过去,像一上一下的立交桥一样。
而二维图就适用了,因为它和网格图性质是一样的。
扩展
如果真的是个三维图,那么求出来的是什么呢?
我们还是把整个图拍扁,把两条边交叉定义为在二维面上有交点。
永远的神 S Y \rm SY SY 给出了答案:那就是【路径点不相交、边交叉对数为偶数的方案数】 减去 【路径点不相交、边交叉对数为奇数的方案数】。
刚好在 【NOI2021 D1T2 路径交点】 中被考到 (〒_〒)。