LGV引理

Hanghang007發表於2024-04-25

LGV引理

行列式引出來的有趣的東西,是與圖論的交界處。

LGV 引理大致內容為:

對於一張有向無環圖,每條邊上都有一個權值 \(w(e)\),記 \(weight(P)\) 表示路徑 \(P\) 上所有邊的權值乘積,對於一個起點組成的集合 \(A\) 和終點組成的集合 \(B\),滿足 \(|A|=|B|\),記 \(e(i,j)\) 表示所有 \(A_i \to B_j\) 的路徑的 \(weight\) 之和,那麼對於矩陣:

\[M=\begin{bmatrix} e(1,1) & e(1,2) & \cdots & e(1,|B|) \\ e(2,1) & e(2,2) & \cdots & e(2,|B|) \\ \vdots & \vdots & \ddots & \vdots \\ e(|A|,1) & e(|A|,2) & \cdots & e(|A|,|B|) \end{bmatrix} \]

\(n=|A|\),引理說明:

\[det(M)=\sum_{S:A\to B}(-1)^{\tau(p()}\prod_{i=1}^{n}weight(P_i)[P_i:A_i\to B_{p_i}] \]

\(S\) 表示不交路徑組,\(p_i\) 表示第 \(i\) 個起點對應的終點。

證明

考慮將行列式展開得到:

\[\begin{aligned} det(M)&=\sum_p (-1)^{\tau (p)}\prod_{i=1}^{n}e(i,p_i)\\ &=\sum_{p} (-1)^{\tau (p)}\prod_{i=1}^n\sum_{P_i:A_i\to B_{p_i}}weight(P_i) \end{aligned} \]

考慮注意到 \({P_1,P_2,\cdots, P_n}\) 是路徑組,考慮列舉路徑組。

\[det(M)=\sum_{T:A\to B}(-1)^{\tau(p)}\prod_{i=1}^{n}weight(T_i)[T_i:A_i\to B_{p_i}] \]

此時的 \(p_i\) 表示為第 \(i\) 個起點的終點為 \(p_i\)

此時和引理唯一的區別在與 \(T\) 可以是任意路徑組。

那麼只需要證明相交路徑組沒貢獻為 \(0\)

那我們只需要對於每個路徑組 \(T\) 找到唯一對應的 \(Q\),使得兩者相加貢獻為 \(0\) 即可。

構造方法為:

找到最小的 \(i\) 使得 \(P_i\) 與別的路徑有交點,在選擇 \(j\) 使得交點離起點最近,若有多個選最小的 \(j\)

然後把 \(P_i\)\(P_j\) 交換首個交點到末尾的路徑。

那麼此時逆序對個數奇偶性改變,後面的乘積不變。

注意:

直接使用 \(\text{LGV}\) 計算的答案只有在平面有向無環圖中的意義為不交路徑組的方案數。

因為注意到 \(\text{LGV}\) 處理的是點不交路徑組,但是非平面圖可能邊不交,因此這種不合法的方案會被記錄。

此時的意義為存在偶數個交點的路徑組減去奇數個交點的路徑數。

P6657 【模板】LGV 引理

\(\text{LGV}\) 矩陣的第 \((i,j)\) 的權值設為 \(\binom{b_j-a_i+n-1}{n-1}\)

直接跑行列式即可。

Turtles

等價於從 \((1,2)\) 走到 \((n-1,m)\)\((2,1)\) 走到 \((n,m-1)\) 的路徑不交方案數,求出方案數後手動行列式即可。

P7736 NOI2021] 路徑交點

對於每一層可以很直接求鄰接矩陣的行列式。

就是注意所說的問題,直接暴力求出每個起點到每個終點的路徑方案數再套上行列式即可。

[ABC216H] Random Robots

期望轉計數,如果這道題只有終點的話那麼可以直接使用 \(\text{LGV}\) 定理,其中矩陣中的點 \((i,j)\) 的權值為 \(\binom{m}{B_j-A_i}\)\(A\) 為起點,\(B\) 為終點。

考慮拉普拉斯展開行列式,每次新加入一個一行一列。

具體而言:

\[M=\begin{bmatrix} e(A_1,B_1) & e(A_1,B_2) & \cdots & e(A_1,B_{|S|}) \\ e(A_2,B_1) & e(A_2,B_2) & \cdots & e(A_2,B_{|S|}) \\ \vdots & \vdots & \ddots & \vdots \\ e(A_{|S|},B_1) & e(A_{|S|},B_2) & \cdots & e(A_{|S|},B_{|S|}) \end{bmatrix} \]

\(f(S,mx)\) 表示當前考慮了集合 \(S\),最大值小於等於 \(mx\) 的答案。

首先如果 \(B_{|S|}<mx\) 直接有 \(f(S,mx-1)\to f(S,mx)\)

否則直接對最後一列做拉普拉斯展開:

\[\begin{aligned} det(M)&=\sum_{i=1}^{|S|}c_{i,|S|}(-1)^{i+|S|}A_{i,|S|} \end{aligned} \]

\(A_{i,j}\) 為餘子式。\(c_{i,|S|}\) 表示矩陣中點的權值,那麼在本題中:

\[f(S,mx)=\sum_{i=1}^{|S|}(-1)^{i+|S|}\binom{m}{B_{|S|}-A_i}f(S\setminus i,mx-1) \]

複雜度為 \(O(nm 2^n)\)

神秘搬的題目

給定一個 \(n\times n\) 的矩陣主對角線上點的權值,求有多少種填完剩下位置的方案,使得每行每列的數都單調不降。

\(n\le 5000\)

首先注意到左下角填數和右上角填數是對稱的,不妨只考慮左下角。

一共只有對行和列分別的限制,我們觀察一個維度限制一個維度。

我們對每一行觀察,將每一行 \((j,a_{i,j})\) 看成一個座標,那麼每一行對應一條路徑 \(P_i\),即從 \((0,0)\) 走到 \((i,a_{i,i})\) 的方案數,每次能從 \((x,y)\) 走到 \((x+1,\ge y)\)

在考察對列的限制,即對於每一行的路徑,設 \(d_{i,j}\) 表示路徑 \(P_i\) 上橫座標為 \(j\) 的點的縱座標,如果不存在則忽略,那麼 \(\forall j,d_{i,j}\le d_{i+1,j}\)

考慮小於等於並不優美,將第 \(i\) 行所有值加上 \(i-1\),不妨設 \(b_i=a_i+i-1\),那麼 \(\forall j,d_{i,j}<d_{i+1,j}\),其實換句話說,就是 \(n\) 條路徑,每條路徑從 \((0,0)\) 走到 \((i,b_i)\),每次只能從 \((x,y)\) 走到 \((x+1,\ge y)\) ,求所有路徑都不相交的方案數。

路徑不相交自然想到 \(\text{LGV}\) 引理,但是 \(\text{LGV}\) 引理只能計數平面圖 \(\text{DAG}\),而這個圖並非平面圖,考慮轉化為網格圖計算。

轉化一下對 \(d\) 的限制,把每條路徑看成一個函式,設 \(g_{i,j}\) 表示函式 \(i\) 縱座標取到 \(j\) 的時候對應的橫座標。

那麼有 \(\forall j,g_{i,j}>g_{i+1,j}\), 那麼考慮如下轉化:

\(n\) 個起點,第 \(i\) 個起點位於 \((i-1,0)\),第 \(i\) 個終點位於 \((0,a_i+i-1)\),每次只能從 \((x,y)\) 走到 \((x-1,y)\) 或者 \((x,y+1)\),求有多少種不交路徑數。

怎麼對應原圖的呢?考慮當前是第 \(i\) 次走水平步 (向左走),此時縱座標為 \(j\),那麼對於對應原圖的座標 \((i,j)\),最後一步對應 \((i,b_i)\)

好,現在是我們熟知的網格圖了,套上模板可知矩陣上 \((i,j)\)\(\binom{b_j+i-1}{i-1}\),答案為行列式的值。

\[\begin{vmatrix} \binom{b_1+0}{0} & \binom{b_2+0}{0} & \cdots & \binom{b_n+0}{0} \\ \binom{b_1+1}{1} & \binom{b_2+1}{1} & \cdots & \binom{b_n+2}{2} \\ \vdots & \vdots & \ddots & \vdots \\ \binom{b_1+n-1}{n-1} & \binom{b_2+n-1}{n-1} & \cdots &\binom{b_n+n-1}{n-1} \end{vmatrix} \]

開啟組合數:

\[\begin{vmatrix} \frac{(b_1+0)!}{b_1!0!} & \frac{(b_2+0)!}{b_2!0!} & \cdots &\frac{(b_n+0)!}{b_n!0!} \\ \frac{(b_1+1)!}{b_1!1!} & \frac{(b_2+1)!}{b_2!1!} & \cdots &\frac{(b_n+1)!}{b_n!1!} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{(b_1+n-1)!}{b_1!(n-1)!} & \frac{(b_2+n-1)!}{b_2!(n-1)!} & \cdots &\frac{(b_n+n-1)!}{b_n!(n-1)!} \end{vmatrix} \]

把每一行的 \((i-1)!\) 提出來

\[\prod_{i=1}^{n}\dfrac{1}{(i-1)!}\begin{vmatrix} \frac{(b_1+0)!}{b_1} & \frac{(b_2+0)!}{b_2!} & \cdots &\frac{(b_n+0)!}{b_n!} \\ \frac{(b_1+1)!}{b_1} & \frac{(b_2+1)!}{b_2!} & \cdots &\frac{(b_n+1)!}{b_n!} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{(b_1+n-1)!}{b_1!} & \frac{(b_2+n-1)!}{b_2!} & \cdots &\frac{(b_n+n-1)!}{b_n!} \end{vmatrix} \]

接下來你需要一些線性代數的基本功:初等矩陣變幻去化簡行列式,其實你會發現,行列式的值等價於範德蒙德行列式。

\(3\times 3\) 的矩陣而言

\[\begin{vmatrix} 1 & 1 & 1 \\ (b_1+1) & (b_2+1) & (b_3+1) \\ (b_1+1)(b_1+2) & (b_2+1)(b_2+2) & (b_3+1)(b_3+2) \end{vmatrix} \]

先將第三行減去第二行的兩倍,再用第二行減去第一行的一倍可以得到:

\[\begin{vmatrix} 1 & 1 & 1 \\ b_1 & b_2 & b_3 \\ (b_1+1)b_1 & (b_2+1)b_2 & (b_3+1)b_3 \end{vmatrix} \]

再將第三行減去第二行的第一行得到:

\[\begin{vmatrix} 1 & 1 & 1 \\ b_1 & b_2 & b_3 \\ b_1^2 & b_2^2 & b_3^2 \end{vmatrix} \]

這個手法可以很好的推廣到高維,具體地式子不再展開說明。

現在轉化為求範德蒙德行列式的值,即:

\[\begin{vmatrix} 1 & 1 & \cdots & 1\\ b_1 & b_2 & \cdots &b_n \\ \vdots & \vdots & \ddots &\vdots\\ b_1^{n-1} & b_2^{n-1} & \cdots &b_n^{n-1} \end{vmatrix} \]

考慮將除了第一行的每一行同時減去上一行的 \(b_1\) 得到

\[\begin{vmatrix} 1 & 1 & \cdots & 1\\ 0 & b_2-b_1 & \cdots &b_n-b_1 \\ \vdots & \vdots & \ddots &\vdots\\ 0 & b_2^{n-2}(b_2-b_1) & \cdots &b_n^{n-2}(b_n-b_1) \end{vmatrix} \]

注意到此時第一列只有 \((1,1)\) 非零,那麼對第一列行列式展開那麼得到值其實就為除去第一行第一列的行列式值。

此時除去第一行第一列之後,把每一列 \((b_i-b_1)\) 提取出來再不斷遞迴即可。

那麼得到:

\[\begin{vmatrix} 1 & 1 & \cdots & 1\\ b_1 & b_2 & \cdots &b_n \\ \vdots & \vdots & \ddots &\vdots\\ b_1^{n-1} & b_2^{n-1} & \cdots &b_n^{n-1} \end{vmatrix} =\prod_{1\le i<j \le n}(b_j-b_i) \]

那麼最終的答案也就為(右上角的方案和左下角的是對稱的,方案數相同)

\[ans=\left( \prod_{i=1}^{n}\dfrac{1}{(i-1)!}\prod_{1\le i<j\le n}(b_j-b_i)\right)^2 \]

直接計算即可得到透過。

後記:使用一些高階的多項式科技可以加速計算。

P9041 PA2021] Fiolki 2

現在考慮如果一個區間滿足區間的最大不交路徑組大小恰好為 \(i\),那麼說明轉到 \(\text{LGV}\) 矩陣上之後存在恰好 \(i\)\(i\) 列的子式的行列式值不為 \(0\),換句話說,\(\text{LGV}\) 矩陣的秩大小為 \(i\)

考慮現在對每條邊賦予一個非零權值,利用拓撲序求出每個起點到當前點的權值乘積。(這裡本來應該對每條邊設一個形式元 \(x\),然後準確表示,但是維度成本太高,隨機一個權值使得秩變小的機率為 \(\dfrac{1}{p}\),證明同P10102)

\(f_i,j\) 表示第 \(i\) 個點從 \(j\) 走到這的權值乘積。

現在只需對每個區間求出 \(f_{i,j}\) 形成的矩陣的列秩的大小即可。

考慮掃描線,維護字首線性基(不會的看幸運數字),將線性基中的編號 \(id_i\) 全部拉出來從大到小排序,那麼左端點在 \([id_{i+1},id_i)\) 的秩的大小為 \(i\)

複雜度 \(O(nk^2+mk)\)