#include <bits/stdc++.h>
using namespace std;
const long long INF = LLONG_MAX;
// Rekonstrukcja ścieżki z parent[]
vector<int> get_path(int target, const vector<int> &parent) {
vector<int> path;
if (parent[target] == -1) return path;
while (target != -1) {
path.push_back(target);
target = parent[target];
}
reverse(path.begin(), path.end());
return path;
}
vector<long long> dijkstra(int n, vector<vector<pair<int,int>>> &adj, int s, vector<int> &parent) {
vector<long long> dist(n, INF);
dist[s] = 0;
parent.assign(n, -1);
priority_queue<pair<long long,int>, vector<pair<long long,int>>, greater<pair<long long,int>>> pq;
pq.push({0, s});
while (!pq.empty()) {
auto [d, u] = pq.top();
pq.pop();
if (d > dist[u]) continue;
for (auto &[v, w] : adj[u]) {
if (dist[u] + w < dist[v]) {
dist[v] = dist[u] + w;
parent[v] = u;
pq.push({dist[v], v});
}
}
}
return dist;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
// ***** DEFINICJA GRAFU *****
int n = 6; // liczba wierzchołków (0..5)
vector<vector<pair<int,int>>> adj(n);
// Dodajemy krawędzie (u, v, w)
adj[0].push_back({1, 7});
adj[0].push_back({2, 9});
adj[1].push_back({3, 10});
adj[2].push_back({3, 5});
adj[3].push_back({4, 3});
adj[4].push_back({5, 1});
// ***** ZDEFINIOWANA ŚCIEŻKA *****
int start = 0;
int target = 5;
vector<int> parent;
vector<long long> dist = dijkstra(n, adj, start, parent);
if (dist[target] == INF) {
cout << "Brak ścieżki.\n";
return 0;
}
cout << "Najkrótsza odległość: " << dist[target] << "\n";
vector<int> path = get_path(target, parent);
cout << "Ścieżka: ";
for (int v : path) cout << v << " ";
cout << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBsb25nIGxvbmcgSU5GID0gTExPTkdfTUFYOwoKLy8gUmVrb25zdHJ1a2NqYSDFm2NpZcW8a2kgeiBwYXJlbnRbXQp2ZWN0b3I8aW50PiBnZXRfcGF0aChpbnQgdGFyZ2V0LCBjb25zdCB2ZWN0b3I8aW50PiAmcGFyZW50KSB7CiAgICB2ZWN0b3I8aW50PiBwYXRoOwogICAgaWYgKHBhcmVudFt0YXJnZXRdID09IC0xKSByZXR1cm4gcGF0aDsKCiAgICB3aGlsZSAodGFyZ2V0ICE9IC0xKSB7CiAgICAgICAgcGF0aC5wdXNoX2JhY2sodGFyZ2V0KTsKICAgICAgICB0YXJnZXQgPSBwYXJlbnRbdGFyZ2V0XTsKICAgIH0KICAgIHJldmVyc2UocGF0aC5iZWdpbigpLCBwYXRoLmVuZCgpKTsKICAgIHJldHVybiBwYXRoOwp9Cgp2ZWN0b3I8bG9uZyBsb25nPiBkaWprc3RyYShpbnQgbiwgdmVjdG9yPHZlY3RvcjxwYWlyPGludCxpbnQ+Pj4gJmFkaiwgaW50IHMsIHZlY3RvcjxpbnQ+ICZwYXJlbnQpIHsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IGRpc3QobiwgSU5GKTsKICAgIGRpc3Rbc10gPSAwOwoKICAgIHBhcmVudC5hc3NpZ24obiwgLTEpOwoKICAgIHByaW9yaXR5X3F1ZXVlPHBhaXI8bG9uZyBsb25nLGludD4sIHZlY3RvcjxwYWlyPGxvbmcgbG9uZyxpbnQ+PiwgZ3JlYXRlcjxwYWlyPGxvbmcgbG9uZyxpbnQ+Pj4gcHE7CiAgICBwcS5wdXNoKHswLCBzfSk7CgogICAgd2hpbGUgKCFwcS5lbXB0eSgpKSB7CiAgICAgICAgYXV0byBbZCwgdV0gPSBwcS50b3AoKTsKICAgICAgICBwcS5wb3AoKTsKCiAgICAgICAgaWYgKGQgPiBkaXN0W3VdKSBjb250aW51ZTsKCiAgICAgICAgZm9yIChhdXRvICZbdiwgd10gOiBhZGpbdV0pIHsKICAgICAgICAgICAgaWYgKGRpc3RbdV0gKyB3IDwgZGlzdFt2XSkgewogICAgICAgICAgICAgICAgZGlzdFt2XSA9IGRpc3RbdV0gKyB3OwogICAgICAgICAgICAgICAgcGFyZW50W3ZdID0gdTsKICAgICAgICAgICAgICAgIHBxLnB1c2goe2Rpc3Rbdl0sIHZ9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBkaXN0Owp9CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgLy8gKioqKiogREVGSU5JQ0pBIEdSQUZVICoqKioqCiAgICBpbnQgbiA9IDY7IC8vIGxpY3piYSB3aWVyemNob8WCa8OzdyAoMC4uNSkKCiAgICB2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LGludD4+PiBhZGoobik7CgogICAgLy8gRG9kYWplbXkga3Jhd8SZZHppZSAodSwgdiwgdykKICAgIGFkalswXS5wdXNoX2JhY2soezEsIDd9KTsKICAgIGFkalswXS5wdXNoX2JhY2soezIsIDl9KTsKICAgIGFkalsxXS5wdXNoX2JhY2soezMsIDEwfSk7CiAgICBhZGpbMl0ucHVzaF9iYWNrKHszLCA1fSk7CiAgICBhZGpbM10ucHVzaF9iYWNrKHs0LCAzfSk7CiAgICBhZGpbNF0ucHVzaF9iYWNrKHs1LCAxfSk7CgogICAgLy8gKioqKiogWkRFRklOSU9XQU5BIMWaQ0lFxbtLQSAqKioqKgogICAgaW50IHN0YXJ0ID0gMDsKICAgIGludCB0YXJnZXQgPSA1OwoKICAgIHZlY3RvcjxpbnQ+IHBhcmVudDsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IGRpc3QgPSBkaWprc3RyYShuLCBhZGosIHN0YXJ0LCBwYXJlbnQpOwoKICAgIGlmIChkaXN0W3RhcmdldF0gPT0gSU5GKSB7CiAgICAgICAgY291dCA8PCAiQnJhayDFm2NpZcW8a2kuXG4iOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGNvdXQgPDwgIk5hamtyw7N0c3phIG9kbGVnxYJvxZvEhzogIiA8PCBkaXN0W3RhcmdldF0gPDwgIlxuIjsKCiAgICB2ZWN0b3I8aW50PiBwYXRoID0gZ2V0X3BhdGgodGFyZ2V0LCBwYXJlbnQpOwoKICAgIGNvdXQgPDwgIsWaY2llxbxrYTogIjsKICAgIGZvciAoaW50IHYgOiBwYXRoKSBjb3V0IDw8IHYgPDwgIiAiOwogICAgY291dCA8PCAiXG4iOwoKICAgIHJldHVybiAwOwp9Cg==