最短路矩阵
注意到题目中有
⌊kb⌋=1+⌊ka⌋ 这个性质。
不难发现这个图可以每
k 个点分一层,每层只有连向下一层的边。
可以发现每一层到下一层的最短路构成了一个
k×k 的矩阵。
设第
i 层到
i+1 层的最短路矩阵为
A,设第
i+1 层到
i+2 层的最短路矩阵为
B。
矩阵计算
那么从设第
i 层到
i+2 层的最短路矩阵
C 可以用
Ci,j=x=1minkAi,x+Bx,j 求出。
这是一个
[+,min] 矩阵,满足交换律和结合律。
构造完矩阵后,答案就是第
⌊ka⌋ 层到第
⌊kb⌋ 层最短路矩阵
M 中的
Mamodk,bmodk。
计算矩阵
接下来就是如何计算第
⌊ka⌋ 层到第
⌊kb⌋ 层最短路矩阵
M。
观察到可以把
⌊ka⌋∼⌊kb⌋ 拆成很多段,这样可以用倍增的思想解决。
设
fi,j 为第
i 层到
i+2j 层的最短路矩阵,转移直接用
fi,j=fi,j−1×fi+2j−1,j−1。
把
⌊ka⌋∼⌊kb⌋ 进行二进制拆分,就可以解决。
细节问题
数据中有
⌊ka⌋=⌊kb⌋ 的数据,需要特判。
这题的空间只有 128MB,如果 MLE 可以尝试把数组开小。