給定有向無環圖(Directed Acyclic Graph, DAG)$G = (V, E)$,以及源點集$S = \{ s_1, s_2, \dots, s_n \}$,匯點集$T = \{ t_1, t_2, \dots, t_n \}$。每一條邊$(x, y)$都有一個權值$w(x, y)$。我們定義一條路徑$\pi: x_0 \to x_1 \to \dots \to x_k$的權值為:
$$ w(\pi) = \prod_{i=1}^k w(x_{i-1}, x_i). $$
對任意兩個節點$x, y \in V$,定義
$$ e(x, y) = \sum_{\pi: x \to y} w(\pi), $$
其中,$\pi: x \to y$表示一條從$x$出發,到達$y$的路徑$\pi$。特別地,如果對所有邊$(x, y)$,都有$w(x, y) \equiv 1$,則$e(x, y)$為$x$到$y$的所有路徑的數量。
我們記路徑$n$元組$(\pi_1, \pi_2, \dots, \pi_n): S \to T$表示$n$條從$S$中節點出發,到達$T$中節點的不相交路徑,其中對所有$i \in [n]$,$\pi_i$從$s_i$出發,並且對任意兩條路徑$\pi_i$和$\pi_j$ $(i \neq j)$,他們都不經過相同節點(包括路徑的兩個端點)。對於一個這樣的路徑$n$元組,存在一個置換$\sigma(\pi_1, \pi_2, \dots, \pi_n): [n] \to [n]$,使得第$i$條路徑$\pi_i$從$s_i$出發,到達$t_{\sigma(i)}$。
Lindström–Gessel–Viennot引理:
$$ \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| = \sum_{(\pi_1, \pi_2, \dots, \pi_n): S \to T} \operatorname{sign}(\sigma(\pi_1, \pi_2, \dots, \pi_n)) \prod_{i=1}^n w(\pi_i), $$
其中$\operatorname{sign}(\sigma)$表示置換$\sigma$的奇偶性,偶置換為$1$,奇置換為$-1$。
特別地,如果對所有邊$(x, y)$,都有$w(x, y) \equiv 1$,並且置換只能是恆等置換(即$\sigma(i) = i$)時才存在不相交的路徑$n$元組,則所求行列式即為不相交的路徑$n$元組的數量。
例題1
有$m$個起點$s_i = (a_i, 1)$,以及對應的$m$個終點$t_i = (b_i, n)$,滿足$1 \leq a_1 \leq a_2 \leq \dots \leq a_m \leq n$且$1 \leq b_1 \leq b_2 \leq \dots \leq b_m \leq n$。每一步可以從$(x, y)$走到$(x+1,y)$或者$(x,y+1)$。求兩兩不相交的路徑$m$元組的數量。$1 \leq n \leq 10^6, 1 \leq m \leq 100$。
解法:我們注意到只有恆等置換對應的路徑才可能不相交。因此,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
有$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
給定一個$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))$。