找到有向非负加权图的最短路径,避免给定子集顶点的任何顶点彼此相邻?

Find the shortest path of a directed non-negative weighted graph avoiding any vertices of a given subset vertices to be next to each other?

假设我有一个简单的有向非负加权图 G = (V, E) 和一个顶点子集 X ⊂ V。该图是邻接表表示,子集 X 是一个列表。 我如何找到一种算法来计算图中不属于 X 的顶点 s、t 之间的短路,并且每当该路径使用 X 中的两个顶点时,这两个顶点之间至少有一个不在 X 中的顶点顶点?该算法应该在O(m+nlogn)时间内。

我已经考虑这个问题很长时间了,但找不到 O(m+nlogn) 时间的算法,知道我该如何处理这个问题吗?

假设 m = |E|n = |V|

Dijkstra 算法在 O(m + n log n) 中具有斐波那契堆 运行s。所以你想在不增加最终时间复杂度的情况下考虑额外的约束。

如果无法在常量时间内查询一个顶点是否在 X 中,那么您首先需要通过在 O(n) 中构建 X 的哈希集来实现。使用此哈希集的后续查询将在恒定时间内 运行。

现在,从图中移除 X 中顶点对之间的边只会添加另一个 O(m)。然后,您可以 运行 Dijkstra 在这个新图上删除边,整个过程只需要 O(m + n log n) 时间。