我们说我们有一个有向的非负加权图。
我们必须在(u,v)之间找到最低成本路径。 路径的成本定义为路径包含的第二最昂贵的边缘的最高成本。
以下是一个例子。
包含4个节点和4个边的图:
1到4之间的最佳路径应为1 - 3 - 4,总成本为2(成本为2和7,第二个最高为2)。
Dijkstra标准SSSP(重建路径并找到第二高边缘)显然不起作用。 我在MST上想过(应该没事),但不能保证能够覆盖最佳路径(u,v)。
答案 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
:
从u
运行DFS,并使用最多U
的边缘找到u
可从X
到达的顶点集v
。如果U
位于V
,则条件已满足。
否则,请根据v
与U
中的DFS设置{<1}}。
V
中存在一个顶点且O(E log E)
中存在其他顶点的边时,才满足条件。时间复杂度:{{1}}。