私は数千のノードとエッジを持つフローアルゴリズムを実装しようとしています。したがって、効率的なデータ構造が必要です。現在、私は次の操作を行います。残余グラフの最速データ構造
構造ノード:私はBFSを実行したときに、私はのためのresidual graph(基本的に後方エッジにエッジを見てする必要がありますノードvを与え
Double Linked Array (Parents) //Edges that enter the node (basicaly a tuple that contains a pointer to the parent node and the weight, current flow of the edge
Double Linked Array (Sons) //Edges that leave the node
問題は、あります私が平行なエッジを持つことができるので、どの前方エッジから後方エッジが来るかを常に知る必要があります。
現在、私はSons(v)のすべてのエッジを最初に処理して問題を解決しています。次に、すべてのエッジの宛先ノードw内の親(w)のインデックスを私に与えるマップを定義しました。したがって、私は格納されたバックエッジを取得し、アルゴリズムを実行することができます。しかし、これらのマップにはログ(E)アクセス時間があり、アルゴリズムが遅くなりすぎます。どのように私はこの問題にアプローチする必要があります(二重リンクリストはstd :: vectorとして実装されています)?