题意
给定网格图上(n)个起点,其对应(n)个终点
路径只允许往上或往左,需要路径各不相交(点相交),求方案数
保证:第(i)个起点为((a_i,0)),第(i)个终点为((0,i))
(n,a_ile 10^6)
做法
处理DAG路径不交问题我们通常会想到Lindström–Gessel–Viennot lemma
[M=egin{pmatrix}
{a_1+1choose 1}&{a_1+2choose 2}&{a_1+3choose 3}&cdots&{a_1+nchoose n}\
{a_2+1choose 1}&{a_2+2choose 2}&{a_2+3choose 3}&cdots&{a_2+nchoose n}\
vdots&vdots&vdots&ddots&vdots\
{a_n+1choose 1}&{a_n+2choose 2}&{a_n+3choose 3}&cdots&{a_n+nchoose n}
end{pmatrix}]
我们就是要求(|M|)
我们将({a_i+jchoose j})写成(frac{1}{j!}(a_i+1)^{overline{j}})的形式
把每列的(frac{1}{j!})提出来后,((a_i+1)^{overline{j}}=sumlimits_{k=0}^j left[ j atop k
ight](a_i+1)^k)
将其看作((a_i+1))的多项式,每列的系数是相同的,故对这个矩阵做初等变换,能化成一个很优美的形式
[M'=egin{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
求行列式有个很优美的公式
通过上述过程,我们最终求的东西为
[prodlimits_{i=1}^n frac{1}{i!}prodlimits_{i=1}^n (a_i+1)prodlimits_{1le i<jle 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)取模即可