Floyd
设 f[k][x][y]
表示只经过 到 的情况下, 到 的最短距离。初始化 f[0]
时,如果两个点一样,则距离为 ,否则为 。
for (k = 1; k <= n; k++) {
for (x = 1; x <= n; x++) {
for (y = 1; y <= n; y++) {
f[x][y] = min(f[x][y], f[x][k] + f[k][y]);
}
}
}
差分约束
先从 向每个点连一条权值为 的边。每个条件是 ,相应地从 向 连一条长度为 的有向边。跑 Bellman-Ford,则 就是 可能的一个解。