设 $A[i][j]$ 为从 $i$ 点到 $j$ 点的边的数量。
设:
$$
\begin{aligned}
E_0[L] & = \sum_{i = 1}^LA^i\\
E_1[L] & = \sum_{i = 1}^Li\times A^i\\
E_2[L] & = \sum_{i = 1}^Li^2\times A^i\\
\end{aligned}
$$
答案就是 $E_2[k]$ 。
考虑用分治求解这三个矩阵。
当 $L$ 是偶数时:
$$
\begin{aligned}
E_0[L] & = \sum_{i = 1}^LA^i\\& = \sum_{i = 1}^{L/2}A^i +A^{L/2}\times \sum_{i = 1}^{L/2}A^i\\&=E_0[L/2]+A^{L/2}\times E_0[L/2]\\
E_1[L]& = \sum_{i = 1}^Li\times A^i\\
& = \sum_{i = 1}^{L/2}i\times A^i+A^{L/2}\times \sum_{i=1}^{L/2}[(i+L/2)\times A^i]\\ &=E_1[L/2]+A^{L/2}\times(\sum_{i=1}^{L/2}i\times A^i+L/2\times\sum_{i=1}^{L/2}A^i)\\
&=E_1[L/2]+A^{L/2}\times(E_1[L/2]+L/2\times E_0[L/2])\\
E_2[L]& = \sum_{i = 1}^Li^2\times A^i\\
& = \sum_{i = 1}^{L/2}i^2\times A^i+A^{L/2}\times \sum_{i=1}^{L/2}[(i+L/2)^2\times A^i]\\
& = \sum_{i = 1}^{L/2}i^2\times A^i+A^{L/2}\times \sum_{i=1}^{L/2}[(i^2+2i(L/2)+(L/2)^2\times A^i]\\
&=E_2[L/2]+A^{L/2}\times(\sum_{i=1}^{L/2}i^2\times A^i+L\times\sum_{i=1}^{L/2}i\times A^i+L^2/4\times\sum_{i=1}^{L/2}A^i)\\
&=E_2[L/2]+A^{L/2}\times(E_2[L/2]+L\times E_1[L/2]+L^2/4\times E_0[L/2])\\
\end{aligned}
$$
当 $L$ 是奇数时:
$$
\begin{aligned}
E_0[L] & = \sum_{i = 1}^LA^i\\
&=A+A\times\sum_{i = 1}^{L-1}A^i\\&=A+A\times E_0[L-1]\\
E_1[L] & = \sum_{i = 1}^Li\times A^i\\&
=A+A\times\sum_{i = 1}^{L-1}((i+1)\times A^i)\\
&=A+A\times(\sum_{i = 1}^{L-1}i\times A^i+\sum_{i = 1}^{L-1} A^i)\\
&=A+A\times (E_1[L-1]+E_0[L-1])\\
E_2[L] & = \sum_{i = 1}^Li^2\times A^i\\
&=A+A\times\sum_{i = 1}^{L-1}((i+1)^2\times A^i)\\
&=A+A\times\sum_{i = 1}^{L-1}((i^2+2i+1)\times A^i)\\
&=A+A\times(\sum_{i = 1}^{L-1}i^2\times A^i+2\sum_{i = 1}^{L-1} i\times A^i+\sum_{i = 1}^{L-1} A^i)\\
&=A+A\times (E_2[L-1]+2E_1[L-1]+E_0[L-1])\\
\end{aligned}
$$
时间复杂度 $O(n^3\log_k)$
代码:
|
|