#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int main() {
// Liczba wierzchołków
int n = 6;
// Lista krawędzi: (from, to, weight)
vector<tuple<int,int,int>> edges = {
{0, 1, 4},
{0, 2, 2},
{1, 2, 5},
{1, 3, 10},
{2, 4, 3},
{4, 3, 4},
{3, 5, 11}
};
// Budowa grafu
vector<vector<pair<int,int>>> graph(n);
for (auto [a, b, w] : edges) {
graph[a].push_back({b, w});
graph[b].push_back({a, w}); // usuń, jeśli graf skierowany
}
// Dijkstra od wierzchołka 0
vector<int> dist(n, INF);
dist[0] = 0;
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
pq.push({0, 0});
while (!pq.empty()) {
auto [d, v] = pq.top();
pq.pop();
if (d > dist[v]) continue;
for (auto [to, w] : graph[v]) {
if (dist[to] > dist[v] + w) {
dist[to] = dist[v] + w;
pq.push({dist[to], to});
}
}
}
// Wyniki
cout << "Najkrotsze sciezki od wierzcholka 0:\n";
for (int i = 0; i < n; i++) {
if (dist[i] == INF)
cout << "Do " << i << ": brak drogi\n";
else
cout << "Do " << i << ": " << dist[i] << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgSU5GID0gMWU5OwoKaW50IG1haW4oKSB7CiAgICAvLyBMaWN6YmEgd2llcnpjaG/FgmvDs3cKICAgIGludCBuID0gNjsKCiAgICAvLyBMaXN0YSBrcmF3xJlkemk6IChmcm9tLCB0bywgd2VpZ2h0KQogICAgdmVjdG9yPHR1cGxlPGludCxpbnQsaW50Pj4gZWRnZXMgPSB7CiAgICAgICAgezAsIDEsIDR9LAogICAgICAgIHswLCAyLCAyfSwKICAgICAgICB7MSwgMiwgNX0sCiAgICAgICAgezEsIDMsIDEwfSwKICAgICAgICB7MiwgNCwgM30sCiAgICAgICAgezQsIDMsIDR9LAogICAgICAgIHszLCA1LCAxMX0KICAgIH07CgogICAgLy8gQnVkb3dhIGdyYWZ1CiAgICB2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LGludD4+PiBncmFwaChuKTsKICAgIGZvciAoYXV0byBbYSwgYiwgd10gOiBlZGdlcykgewogICAgICAgIGdyYXBoW2FdLnB1c2hfYmFjayh7Yiwgd30pOwogICAgICAgIGdyYXBoW2JdLnB1c2hfYmFjayh7YSwgd30pOyAvLyB1c3XFhCwgamXFm2xpIGdyYWYgc2tpZXJvd2FueQogICAgfQoKICAgIC8vIERpamtzdHJhIG9kIHdpZXJ6Y2hvxYJrYSAwCiAgICB2ZWN0b3I8aW50PiBkaXN0KG4sIElORik7CiAgICBkaXN0WzBdID0gMDsKCiAgICBwcmlvcml0eV9xdWV1ZTxwYWlyPGludCxpbnQ+LCB2ZWN0b3I8cGFpcjxpbnQsaW50Pj4sIGdyZWF0ZXI8cGFpcjxpbnQsaW50Pj4+IHBxOwogICAgcHEucHVzaCh7MCwgMH0pOwoKICAgIHdoaWxlICghcHEuZW1wdHkoKSkgewogICAgICAgIGF1dG8gW2QsIHZdID0gcHEudG9wKCk7CiAgICAgICAgcHEucG9wKCk7CgogICAgICAgIGlmIChkID4gZGlzdFt2XSkgY29udGludWU7CgogICAgICAgIGZvciAoYXV0byBbdG8sIHddIDogZ3JhcGhbdl0pIHsKICAgICAgICAgICAgaWYgKGRpc3RbdG9dID4gZGlzdFt2XSArIHcpIHsKICAgICAgICAgICAgICAgIGRpc3RbdG9dID0gZGlzdFt2XSArIHc7CiAgICAgICAgICAgICAgICBwcS5wdXNoKHtkaXN0W3RvXSwgdG99KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvLyBXeW5pa2kKICAgIGNvdXQgPDwgIk5hamtyb3RzemUgc2NpZXpraSBvZCB3aWVyemNob2xrYSAwOlxuIjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgaWYgKGRpc3RbaV0gPT0gSU5GKQogICAgICAgICAgICBjb3V0IDw8ICJEbyAiIDw8IGkgPDwgIjogYnJhayBkcm9naVxuIjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGNvdXQgPDwgIkRvICIgPDwgaSA8PCAiOiAiIDw8IGRpc3RbaV0gPDwgZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=