重み付きグラフ G(V,E) が与えられたとします。
グラフにはN個の頂点 ( 0 から N-1 までの番号が付けられています) とM 個の Bidirectional エッジが含まれています。
各エッジ (vi,vj)は正の距離 dを持ちます(つまり、2 つの頂点 vivj 間の距離は d です)。
任意の 2 つの頂点間には最大で 1 つのエッジがあり、セルフ ループもありません(つまり、頂点をそれ自体に接続するエッジはありません)。
また、 Sはソース頂点、Dは宛先頂点が与えられます。
Qをクエリの数とすると、各クエリには 1 つのエッジ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