Skip to content

Latest commit

 

History

History
25 lines (21 loc) · 548 Bytes

dijkstra.md

File metadata and controls

25 lines (21 loc) · 548 Bytes

Dijkstra

Code

auto dist = vector<long long>(size(), numeric_limits<long long>::max() / 2);
dist[source] = 0ll;
auto comp = [&](int v1, int v2){ return tie(dist[v1], v1) < tie(dist[v2], v2); };
auto que = set<int, decltype(comp)>({source}, comp);
while (not que.empty()) {
	auto v = *que.begin();
	que.erase(que.begin());
	for (auto e : edges[v])
		if (dist[e.to] > dist[v] + e.weight) {
			if (que.count(e.to))
				que.erase(que.find(e.to));
			dist[e.to] = dist[v] + e.weight;
			que.insert(e.to);
		}
}

Problems

Sources