杂题

题意

给定网格图上\(n\)个起点,其对应\(n\)个终点
路径只允许往上或往左,需要路径各不相交(点相交),求方案数
保证:第\(i\)个起点为\((a_i,0)\),第\(i\)个终点为\((0,i)\)
\(n,a_i\le 10^6\)

做法

处理DAG路径不交问题我们通常会想到Lindström–Gessel–Viennot lemma

proof

\[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\)取模即可

posted @ 2020-12-25 09:59  Grice  阅读(134)  评论(0)    收藏  举报