题意:
sol:
考虑floyed
直接暴力做的话复杂度是k×n^3会炸。
考虑一个比较神仙的分块做法。
注意到我们是可以直接求单独某个k的矩阵,使用矩阵快速幂即可(取min的矩阵乘法)。
单独求一次的复杂度是O(n^3logk)。
设块的长度为100。
对k/100的分块边界求一下它们的矩阵。
这些矩阵称为a矩阵。
再求出前100个矩阵,这个直接floyed即可。
然后对他们搞一个后缀min,也就是说第k个矩阵代表了至少走k条边的最短路矩阵。
这些矩阵称为b矩阵。
那么回答的询问的时候设询问q=100x+y。
此时需要做的只是合并第x个a矩阵和第y个b矩阵即可。
由于只关注s-t的最短路,因此复杂度只有n。
综上复杂度O(100×n^3logk+qn)。