有N个城市,并且有M条双向道路连接起来,我必须找到两个固定城市A和B之间的最短路径。
但问题是有两个城市之间的路径被阻止,我必须在每个Q查询中找到最短路径。
我的时间复杂性在我的蛮力算法是O(QNlogN),它给我时间限制超出错误,我如何改进我的解决方案请帮助
Pseduo代码:
for u in Q:
cin>>a>>b;
graph[a][b] = graph[b][a] = INFINITY VALUE
dijkstra algorithm();
cout<<Distance[D]<<endl;
MY CODE Which Is giving me Time Limit Exceeded Error
请帮助我如何改进算法?
答案 0 :(得分:3)
论文Vickrey Prices and Shortest Paths: What is an edge worth? by John Hershberger and Subhash Suri展示了如何在时间O(NlogN + M)中解决这个问题,其中N是顶点数,M是边数。
这允许您根据阻止的道路预先计算M个答案,因此您可以在O(1)中回答每个查询,总复杂度为O(NlogN + M + Q)。