边缘权重最小的路径

时间:2014-08-20 19:08:25

标签: algorithm graph-algorithm shortest-path

我们说我们有一个有向的非负加权图。

我们必须在(u,v)之间找到最低成本路径。 路径的成本定义为路径包含的第二最昂贵的边缘的最高成本。

以下是一个例子。

包含4个节点和4个边的图:

  • 从1到2,成本为3
  • 从1到3,费用为7
  • 从2到3,成本为5
  • 从3到4,费用为2

1到4之间的最佳路径应为1 - 3 - 4,总成本为2(成本为2和7,第二个最高为2)。

Dijkstra标准SSSP(重建路径并找到第二高边缘)显然不起作用。 我在MST上想过(应该没事),但不能保证能够覆盖最佳路径(u,v)。

3 个答案:

答案 0 :(得分:2)

您可以对答案进行二分搜索(按照其重量对边缘进行排序) 对于固定答案c,让我们使用权重>调用边缘。 c重物和其他边缘光。
因此,您需要检查的是,是否存在最多1个重边的路径。您可以通过为轻边分配0成本,为重1分配0并运行0-1 bfs来实现。如果距离<= 1,则可以获得成本最多为c的路径。 时间复杂度为O(E log E)。

答案 1 :(得分:2)

对于足够密集的图,我们可以得到O(E + V log V),它是o(E log E)。使用具有Fibonacci堆的Dijkstra,计算两个最大权重(与第二个最大权重相对)的最短路径树,一个从根u向叶向导,一个从根向向根v。对于每个边s-> t,考虑由从u到s的最大权重最短路径,边缘s-> t以及从t到v的最大权重最短路径组成的路径,其第二个最大权重是通过取最大值来限制的 - &gt; s和t-&gt; v段。

答案 2 :(得分:1)

考虑二元搜索以获得最佳成本。对所有边的权重进行排序,并搜索满足条件的最小值X

There is a u -> v path which has at most one edge with weight greater than X.

如何检查病情?对于给定的X

  1. u运行DFS,并使用最多U的边缘找到u可从X到达的顶点集v。如果U位于V,则条件已满足。

  2. 否则,请根据vU中的DFS设置{<1}}。

  3. 当且仅当在V中存在一个顶点且O(E log E)中存在其他顶点的边时,才满足条件。
  4. 时间复杂度:{{1}}。