Shortest path of DAG with Monge weights
(other_algorithms/monge_shortest_path.hpp)
$n$ 頂点の DAG で辺重みが Monge となるようなものに対して最短路長を高速に求める. [1] で紹介されている簡易版 LARSCH Algorithm が実装されていて,計算量は $O(n \log n)$ .
また,辺数が min_edges
以上 max_edges
以下であるようなものに限った最短路長を高速に求めることも可能(計算量にさらに重み二分探索の $\log$ がつく).
使用方法
最短路長の計算
auto f = [&](int s, int t) -> Cost {
//
};
monge_shortest_path<Cost> msp;
Cost ret = msp.solve(n, f);
辺の本数の下限・上限を指定した最短路長の計算
auto f = [&](int s, int t) -> Cost {
//
};
int n; // 頂点数
int l, r; // 辺の本数が [l, r] の範囲に収まる最短路を見つけたい
Cost max_weight; // f() が返す値の絶対値の上界
Cost ret = monge_shortest_path_with_specified_edges(n, l, r, max_weight, f);
問題例
Links
Verified with
Code
Back to top page