不相交路径计数

一个简单的例子

给出一个 \(n\times m\) 的网格,每次只能向上或向右走,从左下角走到右上角的不相交路径对有多少个?

不相交路径对指两条路径除了起点和终点之外没有任何交点。

有一个比较神奇的方法

首先发现这两条路径其实可以看成 \((1,2)\rightarrow (n-1,m)\)\((2,1)\rightarrow (n,m-1)\) 的两条路径

那么现在相当于给出起点集合 \(S\{A(1,2),B(2,1)\}\) 和终点集合 \(T\{A'(n-1,m),B'(n,m-1)\}\) ,要求出 \(A\rightarrow A',B\rightarrow B'\) 的不相交路径数

我们随便画一条路径:

img1

对于图上每一个相交点,即可以看成这是两条路径的交点,也可以看成两路径碰了头未相交就离开了

也可以发现,当路径交点数为偶数时, \(A\) 最终会走到 \(A'\)\(B\) 最终会走到 \(B'\)

img2

同样的,交点数为奇数时,最终 \(A,B\) 会走到对方的终点:

img3

并且在所有的 \(2^n\) 种情况中,每一个奇数的情况都对应着一个对偶的偶数情况,那么我们将偶数交点数方案减去奇数交点数方案就是不想交路径数,即

\(e(A,A')\) 表示 \(A\rightarrow A'\) 的方案数,\(e(A,B'),e(B,A'),e(B,B')\) 同理

那么答案可以表示为 \(e(A,A')\cdot e(B,B')-e(A,B')\cdot e(B,A')\)

以上的推广

发现上面的答案也可以写为:

\[\left|\begin{array}{cccc} e(A,A')& e(A,B') \\ e(B,A') & e(B,B')\\ \end{array}\right| \]

这时可以给出 LGV 引理:

定义

\(\omega(P)\) 表示 \(P\) 这条路径上所有边的边权之积。(路径计数时,可以将边权都设为 \(1\) )(事实上,边权可以为生成函数)

\(e(u, v)\) 表示 \(u\)\(v\)每一条 路径 \(P\)\(\omega(P)\) 之和,即 \(e(u, v)=\sum\limits_{P:u\rightarrow v}\omega(P)\)

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

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

一组 \(A\rightarrow B\) 的不相交路径 \(S\)\(S_i\) 是一条从 \(A_i\)\(B_{\sigma(S)_i}\) 的路径( \(\sigma(S)\) 是一个排列),对于任何 \(i\ne j\)\(S_i\)\(S_j\) 没有公共顶点。

\(N(\sigma)\) 表示排列 \(\sigma\) 的逆序对个数。

引理

\[M = \begin{bmatrix}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)\\ \vdots&\vdots&\ddots&\vdots\\ e(A_n,B_1)&e(A_n,B_2)&\cdots&e(A_n,B_n)\end{bmatrix} \]

\[\det(M)=\sum\limits_{S:A\rightarrow B}(-1)^{N(\sigma(S))}\prod\limits_{i=1}^n \omega(S_i) \]

其中 \(\sum\limits_{S:A\rightarrow B}\) 表示满足上文要求的 \(A\rightarrow B\) 的每一组不相交路径 \(S\)

证明可以参考 维基百科

需要注意的是:LGV 引理仅适用于 有向无环图

例题

讲几道入门的例题

CF348D. Turtles

题意

给一个 \(n\times m\) 的表,并且给出里面的一些障碍位置

求出从 \((1,1)\) 走到 \((n,m)\) 的不相交路径对的方案数

一个不相交路径对表示两条路径(称为一对),并且两条路径除了 \((1,1)\)\((n,m)\) 之外没有相交点

左上角为 \((1,1)\) 右下角为 \((n,m)\)

交换两路径得到的方案算一种

方案数对 \(10^9+7\) 取模

\(n,m\leq 1000\)

题解

直接用最上面的方法可以发现只要 dp 算出起点集合中的点到终点集合中的点的方案数就行了

Nowcoder Monotonic Matrix

题意

求满足如下条件的 \(n\times m\) 的矩阵 \(A\) 的数量:

+ \(\forall 1\leq i\leq n,1\leq j\leq m,A_{i,j}\in\{0,1,2\}\)

+ \(\forall 1\leq i\leq n,1\leq j\leq m,A_{i,j}\leq A_{i+1,j}\)

+ \(\forall 1\leq i\leq n,1\leq j\leq m,A_{i,j}\leq A_{i,j+1}\)

答案对 \(10^9+7\) 取模

\(n,m\leq 1000\)

题解

发现不同数字之间分界线可以看成两个折线,并且 \(0,2,1\) 这种相邻情况不能出现,也就是说这两条折线不能相交

img4

那么可以看成 \((n,0)\)\((0,m)\) 的不相交路径对数,直接组合数求解即可

hdu5852 IntersectionIsNotAllowed

题意

有一个 \(n\times n\) 的棋盘,一个棋子从 \((x, y)\) 只能走到 \((x, y+1)\)\((x + 1, y)\)

\(k\) 个棋子,一开始第 \(i\) 个棋子放在 \((1, a_i)\) ,最终要到 \((n, b_i)\) ,路径要两两不相交,求方案数对 \(10^9+7\) 取模。

\(1\le n\le 10^5\) , \(1\le k\le 100\) ,保证 \(1\le a_1<a_2<\dots<a_n\le n\) , \(1\le b_1<b_2<\dots<b_n\le n\)

题解

直接放到 LGV 引理里面考虑,发现起点集合就是 \(A=\{a_1,a_2\dots a_n\}\) ,终点集合就是 \(B=\{b_1,b_2\dots b_n\}\)

并且如果路径不相交,那么路径对应关系肯定是 \(a_i\rightarrow b_i\) ,也就是说 \(\sigma(S)_i=i\) ,所以 \(N(\sigma(S))=0\) ,也就是计数时不用考虑符号问题

\(e(a_i,b_j)\) 是可以直接用组合数求出来的,所以直接构造出矩阵再高斯消元就行了

引用资料

posted @ 2020-06-11 19:52  Jerx2y  阅读(641)  评论(0)    收藏  举报