假设给定一个加权图 G(V,E)。
该图包含N个顶点(编号从 0 到 N-1)和M 个双向边。
每条边(vi,vj)都有正距离d(即两个顶点vivj之间的距离为d)
任何两个顶点之间最多有一条边,也没有自环(即,没有边将顶点连接到自身。)
我们也给定S源顶点和D目标顶点。
令Q为查询数,每个查询包含一条边e(x,y)。
对于每个查询,假设原始图中不存在边 (x,y),我们必须找到从源 S 到目标 D 的最短路径。 如果从 S 到 D 不存在任何路径,那么我们必须打印 No。
约束很高 0<=(N,Q,M)<=25000
如何有效地解决这个问题?
到目前为止,我所做的是实现了简单的Dijakstra 算法。
对于每个查询 Q,每次我将 (x,y) 分配给 Infinity 并找到 Dijakstra 最短路径。
但是这种方法会很慢,因为整体复杂度为Q(Dijastra Shortes 路径的时间复杂度)*
例子::
N=6,M=9
S=0 ,D=5
(u,v,cost(u,v))
0 2 4
3 5 8
3 4 1
2 3 1
0 1 1
4 5 1
2 4 5
1 2 1
1 3 3
Total Queries =6
Query edge=(0,1) Answer=7
Query edge=(0,2) Answer=5
Query edge=(1,3) Answer=5
Query edge=(2,3) Answer=6
Query edge=(4,5) Answer=11
Query edge=(3,4) Answer=8