基本上,图表的一个子集具有蓝色的边
所以我知道如何用O(n ^ 3)中的DP找到所有对最短路径,但是如何解释问题所需的颜色和边缘数的准确性?
答案 0 :(得分:1)
这可以使用Floydd-Warshall的变体在O(k ^ 2.n ^ 3)中完成。
不是跟踪两个节点 i 和 j 之间的最小路径权重 d(i,j),而是跟踪 i 和 j 之间路径的最小路径权重 d(i,j,r),其中 r 蓝色边,对于0≤ r ≤ k 。
检查通过节点 m 的路径时的更新步骤,其中通常 d(i,j)将使用 d(i,i)的总和进行更新m)和 d(m,j)如果它更小,变为:
for u: 0 .. k
for v: 0 .. (k-u)
s = d(i,m,u) + d(m,j,v)
d(i,j,u+v) = min( s, d(i,j,u+v) )
最后,你读了 d(i,j,k)。