summaryrefslogtreecommitdiff
path: root/content/graph/dijkstra.cpp
blob: ab4bef9a01b1a2856a59728f15efe8bec87c6488 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using Dist = ll;

auto dijkstra(vector<vector<pair<int, Dist>>> &adj, int start) {
	priority_queue<pair<Dist, int>> pq;
	vector<Dist> dist(ssize(adj), INF);
	dist[start] = 0, pq.emplace(0, start);

	while (!empty(pq)) {
		auto [du, u] = pq.top();
		du = -du, pq.pop();
		if (du > dist[u]) continue; // WICHTIG!

		for (auto [v, d]: adj[u]) {
			Dist dv = du + d;
			if (dv < dist[v]) dist[v] = dv, pq.emplace(-dv, v);
	}}
	return dist;
}