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¨mGesselViennotlemma,即 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:uvω(P)

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

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

一组 A → B A\rightarrow B AB 的不相交路径 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:AB(1)N(σ(S))i=1nω(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:AB 为上文提到的每一组不相交路径 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=1nPi:aibσ(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):ABsign(σ(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 条路径中,这样的一个逆序代表什么?根据引子里的分析,我们不难发现一个逆序的产生就意味着两条路径相交,那么,根据容斥原理,不难发现上式底下那个大括号框出的式子是等于零的了!

例题

不管在有向无环图中是否可行,反正在网格图中是可行的。

下面看这道题:

Gym102978A:Ascending Matrix

英文题解:
在这里插入图片描述

释疑

虽然都说是有向无环图适用,但是是事实是,我们会找到很多有向无环图,它们计算出的答案并不正确

我们会发现一个规律:这些不适用的有向无环图都是三维图

什么意思呢?也就是我们无法把所有点和边在平面上,使得边之间不交叉

这个定理的证明核心,其实是对于两对点 a → b    ,    c → d a\rightarrow b\;,\;c\rightarrow d ab,cd ,交换 c c c d d d不存在方案合法。如果是三维图的话,它们可以绕过去,像一上一下的立交桥一样。

二维图就适用了,因为它和网格图性质是一样的。

扩展

如果真的是个三维图,那么求出来的是什么呢?

我们还是把整个图拍扁,把两条边交叉定义为在二维面上有交点。

永远的神 S Y \rm SY SY 给出了答案:那就是【路径点不相交边交叉对数为偶数的方案数】 减去 【路径点不相交边交叉对数为奇数的方案数】。

刚好在 【NOI2021 D1T2 路径交点】 中被考到 (〒_〒)。

posted @ 2021-04-03 17:48  DD_XYX  阅读(68)  评论(0编辑  收藏  举报