LGV 引理——二维DAG上 n 点对不相交路径方案数

2022-10-15,,,

文章目录

引入
简介
定义
引理
证明
例题
释疑
扩展

引入

有这样一个问题:

甲和乙在一张网格图上,初始位置

(

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​======​∑σ∈Sn​​sign(σ)∏i=1n​e(ai​,bσ(i)​)∑σ∈Sn​​sign(σ)∏i=1n​∑Pi​:ai​→bσ(i)​​ω(Pi​)∑σ∈Sn​​sign(σ)∑{ω(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→B​sign(σ(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

a→b,c→d ,交换

c

c

c 和

d

d

d 后不存在方案合法。如果是三维图的话,它们可以绕过去,像一上一下的立交桥一样。

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

扩展

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

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

永远的神 S

Y

\rm SY

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

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

LGV 引理——二维DAG上 n 点对不相交路径方案数的相关教程结束。

《LGV 引理——二维DAG上 n 点对不相交路径方案数.doc》

下载本文的Word格式文档,以方便收藏与打印。