写了个很玄学的代码,但是过了,怕假,所以问一下。
就是考虑对时间离散化,ft,i,jf_{t,i,j}ft,i,j 表示在时间为 ttt 时, iii,jjj 间的最短路,每次按照时间将结点 kkk 加入,先更新 ft,k,if_{t,k,i}ft,k,i 再利用 ft,i,k+ft,k,jf_{t,i,k}+f_{t,k,j}ft,i,k+ft,k,j 更新 ft,i,jf_{t,i,j}ft,i,j,然后预处理。 之后对于查询,O(logn)O(\log n)O(logn) 二分出时间的位置,然后输出相应 ft,i,jf_{t,i,j}ft,i,j。
总复杂度 O(n3+Qn)O(n^3+Qn)O(n3+Qn)。
Code
求证明/证伪