$floyd$ + 倍增.
- 写保卫王国那道题的时候学习了 Min-plus matrix multiplication ,即将矩阵乘法中的乘法换成加法,加法换成取 $\min$ .这东西还有其他的用法.若一个图的邻接矩阵的 $k$ 次方为 $A$ (在这样运算下), 则 $A_{i,j}$ 表示图中从 $i$ 到 $j$ ,经过 $k$ 条边的最短路长度.
- 为啥?因为这样运算其实就是 $floyd$ 的转移,只不过恰好也满足了结合律.
- 要找最短的负环,可以设 $f[k]$ 为原邻接矩阵的 $2^k$ 次方,倍增解决即可,环的大小即为边的数目.
- 时间复杂度 $O(n^3logn)$ .
- 注意要将邻接矩阵中自己到自己的距离设为 $0$ ,这样答案才满足单调性.
也可以直接二分答案,时间复杂度为 $O(n^3log^2n)$ ,但对于 $n\leq 300$ 来说差异不大.
1 |
|