#include <iostream>
#include <vector>
#include <queue>
#include <limits>
using namespace std;
const int INF = numeric_limits<int>::max();
void dijkstra(int start, const vector<vector<pair<int,int>>>& graph, vector<int>& dist) {
int n = graph.size();
dist.assign(n, INF);
dist[start] = 0;
// (odległość, wierzchołek)
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
pq.push({0, start});
while (!pq.empty()) {
auto [d, u] = pq.top();
pq.pop();
if (d > dist[u]) continue;
for (auto [v, w] : graph[u]) {
if (dist[u] + w < dist[v]) {
dist[v] = dist[u] + w;
pq.push({dist[v], v});
}
}
}
}
int main() {
// Przykładowy graf:
// 0 - A
// 1 - B
// 2 - C
// 3 - D
//
// Krawędzie:
// A-B (2), A-C (5), A-D (1)
// B-D (3)
// C-D (2)
vector<vector<pair<int,int>>> graph(4);
graph[0].push_back({1, 2}); // A -> B
graph[0].push_back({2, 5}); // A -> C
graph[0].push_back({3, 1}); // A -> D
graph[1].push_back({0, 2}); // B -> A
graph[1].push_back({3, 3}); // B -> D
graph[2].push_back({0, 5}); // C -> A
graph[2].push_back({3, 2}); // C -> D
graph[3].push_back({0, 1}); // D -> A
graph[3].push_back({1, 3}); // D -> B
graph[3].push_back({2, 2}); // D -> C
vector<int> dist;
dijkstra(0, graph, dist);
cout << "Najkrotsze odleglosci od A:\n";
for (int i = 0; i < dist.size(); i++) {
cout << "A -> " << char('A' + i) << " = " << dist[i] << "\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxsaW1pdHM+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IElORiA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwoKdm9pZCBkaWprc3RyYShpbnQgc3RhcnQsIGNvbnN0IHZlY3Rvcjx2ZWN0b3I8cGFpcjxpbnQsaW50Pj4+JiBncmFwaCwgdmVjdG9yPGludD4mIGRpc3QpIHsKICAgIGludCBuID0gZ3JhcGguc2l6ZSgpOwogICAgZGlzdC5hc3NpZ24obiwgSU5GKTsKICAgIGRpc3Rbc3RhcnRdID0gMDsKCiAgICAvLyAob2RsZWfFgm/Fm8SHLCB3aWVyemNob8WCZWspCiAgICBwcmlvcml0eV9xdWV1ZTxwYWlyPGludCxpbnQ+LCB2ZWN0b3I8cGFpcjxpbnQsaW50Pj4sIGdyZWF0ZXI8cGFpcjxpbnQsaW50Pj4+IHBxOwogICAgcHEucHVzaCh7MCwgc3RhcnR9KTsKCiAgICB3aGlsZSAoIXBxLmVtcHR5KCkpIHsKICAgICAgICBhdXRvIFtkLCB1XSA9IHBxLnRvcCgpOwogICAgICAgIHBxLnBvcCgpOwoKICAgICAgICBpZiAoZCA+IGRpc3RbdV0pIGNvbnRpbnVlOwoKICAgICAgICBmb3IgKGF1dG8gW3YsIHddIDogZ3JhcGhbdV0pIHsKICAgICAgICAgICAgaWYgKGRpc3RbdV0gKyB3IDwgZGlzdFt2XSkgewogICAgICAgICAgICAgICAgZGlzdFt2XSA9IGRpc3RbdV0gKyB3OwogICAgICAgICAgICAgICAgcHEucHVzaCh7ZGlzdFt2XSwgdn0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIC8vIFByenlrxYJhZG93eSBncmFmOgogICAgLy8gMCAtIEEKICAgIC8vIDEgLSBCCiAgICAvLyAyIC0gQwogICAgLy8gMyAtIEQKICAgIC8vCiAgICAvLyBLcmF3xJlkemllOgogICAgLy8gQS1CICgyKSwgQS1DICg1KSwgQS1EICgxKQogICAgLy8gQi1EICgzKQogICAgLy8gQy1EICgyKQoKICAgIHZlY3Rvcjx2ZWN0b3I8cGFpcjxpbnQsaW50Pj4+IGdyYXBoKDQpOwoKICAgIGdyYXBoWzBdLnB1c2hfYmFjayh7MSwgMn0pOyAvLyBBIC0+IEIKICAgIGdyYXBoWzBdLnB1c2hfYmFjayh7MiwgNX0pOyAvLyBBIC0+IEMKICAgIGdyYXBoWzBdLnB1c2hfYmFjayh7MywgMX0pOyAvLyBBIC0+IEQKCiAgICBncmFwaFsxXS5wdXNoX2JhY2soezAsIDJ9KTsgLy8gQiAtPiBBCiAgICBncmFwaFsxXS5wdXNoX2JhY2soezMsIDN9KTsgLy8gQiAtPiBECgogICAgZ3JhcGhbMl0ucHVzaF9iYWNrKHswLCA1fSk7IC8vIEMgLT4gQQogICAgZ3JhcGhbMl0ucHVzaF9iYWNrKHszLCAyfSk7IC8vIEMgLT4gRAoKICAgIGdyYXBoWzNdLnB1c2hfYmFjayh7MCwgMX0pOyAvLyBEIC0+IEEKICAgIGdyYXBoWzNdLnB1c2hfYmFjayh7MSwgM30pOyAvLyBEIC0+IEIKICAgIGdyYXBoWzNdLnB1c2hfYmFjayh7MiwgMn0pOyAvLyBEIC0+IEMKCiAgICB2ZWN0b3I8aW50PiBkaXN0OwogICAgZGlqa3N0cmEoMCwgZ3JhcGgsIGRpc3QpOwoKICAgIGNvdXQgPDwgIk5hamtyb3RzemUgb2RsZWdsb3NjaSBvZCBBOlxuIjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlzdC5zaXplKCk7IGkrKykgewogICAgICAgIGNvdXQgPDwgIkEgLT4gIiA8PCBjaGFyKCdBJyArIGkpIDw8ICIgPSAiIDw8IGRpc3RbaV0gPDwgIlxuIjsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=