weighted graph

(重み付き)グラフを扱います。

コンストラクタ

weighted_graph wg(ll n);

n頂点0辺のグラフを構築します。

計算量

\(O(n)\)

add_edge / add_directed_edge

wg.add_edge(ll a,ll b,ll cost = 1);
wg.add_directed_edge(ll from,ll to,ll cost = 1);
    

頂点\(a\)と\(b\)を結ぶ重み\(cost\)の無効辺または、

頂点\(from\)から\(to\)への重み\(cost\)の有効辺を貼ります。

costを指定しなかった場合重み1として扱います。

計算量

\(O(1)\)

dijkstra

wg.dijkstra(ll s);

dijkstra法を用いて頂点\(s\)から各頂点への最短距離を求めます。

返り値

vector<ll> res

\(res_i\)は頂点\(s\)から\(i\)への最短距離。

計算量

\(O(n)\)

e[i]

for(auto edge : wg.e[i]){
    ll to,cost;
    tie(to,cost) = edge;
}

\(e_i\)は頂点\(i\)から移動することのできる "頂点番号と、その頂点へ向かう辺のコスト"のpairです。