不相交路径计数
一个简单的例子
给出一个 \(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'\) 的不相交路径数
我们随便画一条路径:

对于图上每一个相交点,即可以看成这是两条路径的交点,也可以看成两路径碰了头未相交就离开了
也可以发现,当路径交点数为偶数时, \(A\) 最终会走到 \(A'\) ,\(B\) 最终会走到 \(B'\) :

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

并且在所有的 \(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')\)
以上的推广
发现上面的答案也可以写为:
这时可以给出 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\) 的逆序对个数。
引理
其中 \(\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\) 这种相邻情况不能出现,也就是说这两条折线不能相交

那么可以看成 \((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)\) 是可以直接用组合数求出来的,所以直接构造出矩阵再高斯消元就行了

浙公网安备 33010602011771号