杂题
题意
给定网格图上\(n\)个起点,其对应\(n\)个终点
路径只允许往上或往左,需要路径各不相交(点相交),求方案数
保证:第\(i\)个起点为\((a_i,0)\),第\(i\)个终点为\((0,i)\)
\(n,a_i\le 10^6\)
做法
处理DAG路径不交问题我们通常会想到Lindström–Gessel–Viennot lemma
\[M=\begin{pmatrix}
{a_1+1\choose 1}&{a_1+2\choose 2}&{a_1+3\choose 3}&\cdots&{a_1+n\choose n}\\
{a_2+1\choose 1}&{a_2+2\choose 2}&{a_2+3\choose 3}&\cdots&{a_2+n\choose n}\\
\vdots&\vdots&\vdots&\ddots&\vdots\\
{a_n+1\choose 1}&{a_n+2\choose 2}&{a_n+3\choose 3}&\cdots&{a_n+n\choose n}
\end{pmatrix}\]
我们就是要求\(|M|\)
我们将\({a_i+j\choose j}\)写成\(\frac{1}{j!}(a_i+1)^{\overline{j}}\)的形式
把每列的\(\frac{1}{j!}\)提出来后,\((a_i+1)^{\overline{j}}=\sum\limits_{k=0}^j \left[ j \atop k \right](a_i+1)^k\)
将其看作\((a_i+1)\)的多项式,每列的系数是相同的,故对这个矩阵做初等变换,能化成一个很优美的形式
\[M'=\begin{pmatrix}
(a_1+1)^1&(a_1+1)^2&(a_1+1)^3&\cdots&(a_1+1)^n\\
(a_2+1)^1&(a_2+1)^2&(a_2+1)^3&\cdots&(a_2+1)^n\\
\vdots&\vdots&\vdots&\ddots&\vdots\\
(a_n+1)^1&(a_n+1)^2&(a_n+1)^3&\cdots&(a_n+1)^n
\end{pmatrix}\]
我们在每一行提出一个\((a_i+1)\)后,这是Vandermonde matrix
求行列式有个很优美的公式
通过上述过程,我们最终求的东西为
\[\prod\limits_{i=1}^n \frac{1}{i!}\prod\limits_{i=1}^n (a_i+1)\prod\limits_{1\le i<j\le n}(a_j-a_i)
\]
我们可以卷积求出后面\(k=a_j-a_i\)出现的次数,由于我们在求幂,故应对\(\phi(mod)\)取模
若\(a_i=a_j\),\(|M|=0\),可特判掉
故\(k=a_j-a_i\)出现的次数是\(O(n)\)级别的,直接对\(mod\)取模即可