Loading [MathJax]/extensions/TeX/mathchoice.js

Lindström–Gessel–Viennot引理及其应用

给定有向无环图(Directed Acyclic Graph, DAG)G=(V,E),以及源点集S={s1,s2,,sn},汇点集T={t1,t2,,tn}。每一条边(x,y)都有一个权值w(x,y)。我们定义一条路径π:x0x1xk的权值为:

w(π)=ki=1w(xi1,xi).

对任意两个节点x,yV,定义

e(x,y)=π:xyw(π),

其中,π:xy表示一条从x出发,到达y的路径π。特别地,如果对所有边(x,y),都有w(x,y)1,则e(x,y)xy的所有路径的数量。

我们记路径n元组(π1,π2,,πn):ST表示n条从S中节点出发,到达T中节点的不相交路径,其中对所有i[n]πisi出发,并且对任意两条路径πiπj (ij),他们都不经过相同节点(包括路径的两个端点)。对于一个这样的路径n元组,存在一个置换σ(π1,π2,,πn):[n][n],使得第i条路径πisi出发,到达tσ(i)

Lindström–Gessel–Viennot引理:

|e(s1,t1)e(s1,t2)e(s1,tn)e(s2,t1)e(s2,t2)e(s2,tn)e(sn,t1)e(sn,t2)e(sn,tn)|=(π1,π2,,πn):STsign(σ(π1,π2,,πn))ni=1w(πi),

其中sign(σ)表示置换σ的奇偶性,偶置换为1,奇置换为1

特别地,如果对所有边(x,y),都有w(x,y)1,并且置换只能是恒等置换(即σ(i)=i)时才存在不相交的路径n元组,则所求行列式即为不相交的路径n元组的数量。

 

例题1

luogu P6657. 【模板】LGV引理

m个起点si=(ai,1),以及对应的m个终点ti=(bi,n),满足1a1a2amn1b1b2bmn。每一步可以从(x,y)走到(x+1,y)或者(x,y+1)。求两两不相交的路径m元组的数量。1n106,1m100

解法:我们注意到只有恒等置换对应的路径才可能不相交。因此,Lindström–Gessel–Viennot引理所求的行列式即为答案。其中,

e(s_i, t_j) = \begin{cases} \binom{b_j-a_i+n-1}{b_j-a_i} & b_j \geq a_i, & \\ 0 & \text{otherwise}. \end{cases}

时间复杂度为O(n+m^3)

 

例题2

2021牛客暑期多校训练营9 C. Cells

n个起点s_i = (0, a_i),以及对应的n个终点t_i = (i, 0),其中1 \leq i \leq n,满足0 \leq a_1 < a_2 < \dots < a_n \leq 10^6。每一步可以从(x, y)走到(x+1,y)或者(x,y-1)。求两两不相交的路径n元组的数量。1 \leq n \leq 5 \cdot 10^5

解法:思路同例题1。但最后列出的行列式是n \times n阶的矩阵,直接O(n^3)Gauss消元是不能接受的。注意到,

e(s_i, t_j) = \binom{a_i+j}{j} = \frac{(a_i+j)!}{j!a_i!}.

所求行列式可化为

\begin{aligned} \left| \begin{matrix} e(s_1, t_1) & e(s_1, t_2) & \dots & e(s_1, t_n) \\ e(s_2, t_1) & e(s_2, t_2) & \dots & e(s_2, t_n) \\ \vdots & \vdots & \ddots & \vdots \\ e(s_n, t_1) & e(s_n, t_2) & \dots & e(s_n, t_n) \end{matrix} \right| & = \left| \begin{matrix} \frac{(a_1+1)!}{1!a_1!} & \frac{(a_1+2)!}{2!a_1!} & \dots & \frac{(a_1+n)!}{n!a_1!} \\ \frac{(a_2+1)!}{1!a_2!} & \frac{(a_2+2)!}{2!a_2!} & \dots & \frac{(a_2+n)!}{n!a_2!} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{(a_n+1)!}{1!a_n!} & \frac{(a_n+2)!}{2!a_n!} & \dots & \frac{(a_n+n)!}{n!a_n!} \end{matrix} \right| =  \left(\prod_{i=1}^n \frac{(a_i+1)!}{ i! a_i! }\right) \left| \begin{matrix} 1 & a_1+2 & \dots & (a_1+2) \dots (a_1+n) \\ 1 & a_2+2 & \dots & (a_2+2) \dots (a_2+n) \\ \vdots & \vdots & \ddots & \vdots \\ 1 & a_n+2 & \dots & (a_n+2) \dots (a_n+n) \\ \end{matrix} \right| \\ & = \left(\prod_{i=1}^n \frac{a_i+1}{i!}\right) \left| \begin{matrix} 1 & a_1 & \dots & a_1^{n-1} \\ 1 & a_2 & \dots & a_2^{n-1} \\ \vdots & \vdots & \ddots & \vdots \\ 1 & a_n & \dots & a_n^{n-1} \\ \end{matrix} \right|  = \left(\prod_{i=1}^n \frac{a_i+1}{i!}\right) \left( \prod_{1 \leq i < j \leq n} (a_i-a_j) \right) \end{aligned}

提出系数之后,可化为一个Vandermonde行列式,而最后我们要求a_i两两之差之积。我们注意到0 \leq a_i \leq 10^6 =: W,从而-10^6 \leq a_i-a_j \leq 10^6,因此可以考虑使用FFT优化卷积O(W \log W)统计不同可能的差的数量即可。

 

例题3

CodeForces 167E. Wizards and Bets

给定n个节点,m条边的有向无环图G = (V, E),其有恰好k个无入边以及k个无出边的点,按照他们的编号从小到大排序后依次为s_1, s_2, \dots, s_k以及t_1, t_2, \dots, t_k。求【对应置换是偶置换的路径k元组的数量】与【对应置换是奇置换的路径k元组的数量】之差。n \leq 600, m \leq 10^5

解法:令每条边的权值w(x, y) = 1,则Lindström–Gessel–Viennot引理所求的行列式即为答案。所有的e(s_i, t_j)(即从s_i走到t_j的路径的数量)可以在O(nm)的时间内求出。于是总的时间复杂度为O(n^3+nm)

 

例题4

NOI2021 Day1 2. 路径交点

给定一个k层的有向无环图,其中第i(1 \leq i \leq k)层有n_i个节点,且n_1 = n_k。从第i层走向第i+1层的边(x_1, y_1)(x_2, y_2) (x_1 \neq x_2, y_1 \neq y_2)存在一个交点,当且仅当(x_1-x_2)(y_1-y_2) < 0。一个从第1层节点走向第k层节点的(不在顶点相交的)路径n_1元组的交点个数为其中任意两条路径的交点个数之和。求【交点个数为偶数的路径n_1元组的数量】与【交点个数为奇数的路径n_1元组的数量】之差。k \leq 100, n_i \leq 200

解法:注意到【交点个数为偶数的路径n_1元组】即为【对应置换是偶置换的路径n_1元组】。问题直接化为例题3。时间复杂度为O(k n^3),其中n = \max\{n_1,n_2,\dots,n_k\}

 

例题5

AtCoder Beginner Contest 216 H. Random Robots

给定k个起点(0, x_1), (0, x_2), \dots, (0, x_k),满足0 \leq x_1 < x_2 < \dots < x_k \leq 1000。每一步可以从(x, y)走到(x+1,y)或者(x+1,y+1)。求终点在(n, y_i)的所有不相交的路径k元组的数量。1 \leq k \leq 10, 1 \leq n \leq 1000

解法:

根据Lindström–Gessel–Viennot引理,我们枚举所有可能的终点,记x_i = (0, x_i)以及y_i = (n, y_i),将其求和得

\sum_{0 \leq y_1 < y_2 < \dots < y_k \leq x_k+n} \left| \begin{matrix} e(x_1, y_1) & e(x_1, y_2) & \dots & e(x_1, y_n) \\ e(x_2, y_1) & e(x_2, y_2) & \dots & e(x_2, y_n) \\ \vdots & \vdots & \ddots & \vdots \\ e(x_n, y_1) & e(x_n, y_2) & \dots & e(x_n, y_n) \end{matrix} \right|.

其中,e(x_i, y_j) = \begin{cases} \binom{n}{y_j-x_i} & 0 \leq y_j-x_i \leq n \\ 0 & \text{otherwise} \end{cases}

S = \{s_1, s_2, \dots, s_{|S|}\} \subseteq [k]b为终点y_i的上界,定义

f(S, b) = \sum_{0 \leq y_1 < y_2 < \dots < y_{|S|} \leq b} \left| \begin{matrix} e(x_{s_1}, y_1) & e(x_{s_1}, y_2) & \dots & e(x_{s_1}, y_{|S|}) \\ e(x_{s_2}, y_1) & e(x_{s_2}, y_2) & \dots & e(x_{s_2}, y_{|S|}) \\ \vdots & \vdots & \ddots & \vdots \\ e(x_{s_{|S|}}, y_1) & e(x_{s_{|S|}}, y_2) & \dots & e(x_{s_{|S|}}, y_{|S|}) \end{matrix} \right|.

于是所求为f([k], x_k + n)

我们可以考虑f(S, b)可以从哪些状态推得。

1. y_{|S|} < b,此时来自的状态是f(S, b-1)

2. y_{|S|} = b,此时所求为

 \sum_{0 \leq y_1 < y_2 < \dots < y_{|S|-1} < y_{|S|} = b} \left| \begin{matrix} e(x_{s_1}, y_1) & e(x_{s_1}, y_2) & \dots & e(x_{s_1}, y_{|S|}) \\ e(x_{s_2}, y_1) & e(x_{s_2}, y_2) & \dots & e(x_{s_2}, y_{|S|}) \\ \vdots & \vdots & \ddots & \vdots \\ e(x_{s_{|S|}}, y_1) & e(x_{s_{|S|}}, y_2) & \dots & e(x_{s_{|S|}}, y_{|S|}) \end{matrix} \right| = \sum_{i=1}^{|S|} (-1)^{|S|+i} e(x_{s_i}, y_{|S|}) \left| \begin{matrix} e(x_{s_1}, y_1) & e(x_{s_1}, y_2) & \dots & e(x_{s_1}, y_{|S|-1}) \\ \vdots & \vdots & \cdots & \vdots \\ e(x_{s_{i-1}}, y_1) & e(x_{s_{i-1}}, y_2) & \dots & e(x_{s_{i-1}}, y_{|S|-1}) \\ e(x_{s_{i+1}}, y_1) & e(x_{s_{i+1}}, y_2) & \dots & e(x_{s_{i+1}}, y_{|S|-1}) \\ \vdots & \vdots & \cdots & \vdots \\ e(x_{s_{|S|}}, y_1) & e(x_{s_{|S|}}, y_2) & \dots & e(x_{s_{|S|}}, y_{|S|-1}) \end{matrix} \right| = \sum_{i=1}^{|S|} (-1)^{|S|+i} e(x_{s_i}, y_{|S|}) f(S\setminus\{s_i\}, b-1).

综上,动态规划方程为

f(S, b) = f(S, b-1) + \sum_{i=1}^{|S|} (-1)^{|S|+i} e(x_{s_i}, b) f(S\setminus\{s_i\}, b-1).

边界条件为f(S, -\infty) = [S = \emptyset]

时间复杂度为O(k2^k(n+x_k))

 

posted @   liouzhou_101  阅读(572)  评论(1编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2020-09-03 CodeForces 1396E. Distance Matching
点击右上角即可分享
微信分享提示