using path = pair; //dist, destination auto dijkstra(const vector>& adj, int start) { priority_queue, greater> pq; vector dist(ssize(adj), INF); vector prev(ssize(adj), -1); dist[start] = 0; pq.emplace(0, start); while (!pq.empty()) { auto [dv, v] = pq.top(); pq.pop(); if (dv > dist[v]) continue; // WICHTIG! for (auto [du, u] : adj[v]) { ll newDist = dv + du; if (newDist < dist[u]) { dist[u] = newDist; prev[u] = v; pq.emplace(dist[u], u); }}} return dist; //return prev; }