#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
// Global declarations
vector<vector<pair<int, int>>> graph;
vector<int> dist;
vector<int> parent;
// Function declarations
void takeInput(int e);
void dijkstra(int source, int n);
void printPath(int node);
void printResult(int n);
int main() {
int nodes, edges;
cin >> nodes >> edges;
graph.resize(nodes + 1);
dist.resize(nodes + 1);
parent.resize(nodes + 1);
takeInput(edges);
dijkstra(0, nodes);
printResult(nodes);
return 0;
}
// Input graph
void takeInput(int e) {
int u, v, wt;
for (int i = 0; i < e; i++) {
cin >> u >> v >> wt;
graph[u].push_back({v, wt});
graph[v].push_back({u, wt});
}
}
// Dijkstra Algorithm
void dijkstra(int source, int n) {
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
for (int i = 0; i <= n; i++) {
dist[i] = INF;
parent[i] = -1;
}
dist[source] = 0;
pq.push({0, source});
while (!pq.empty()) {
int u = pq.top().second;
pq.pop();
for (auto edge : graph[u]) {
int v = edge.first;
int wt = edge.second;
if (dist[u] + wt < dist[v]) {
dist[v] = dist[u] + wt;
parent[v] = u;
pq.push({dist[v], v});
}
}
}
}
// Print shortest path
void printPath(int node) {
if (node == -1) return;
printPath(parent[node]);
cout << node;
if (parent[node] != -1)
cout << " -> ";
}
// Print final result
void printResult(int n) {
for (int i = 1; i <= n; i++) {
cout << "Customer " << i << ": ";
if (dist[i] == INF) {
cout << "Not reachable" << endl;
}
else {
cout << "Minimum Distance = " << dist[i] << ", Path = ";
printPath(i);
cout << endl;
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgSU5GID0gMWU5OwoKLy8gR2xvYmFsIGRlY2xhcmF0aW9ucwp2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LCBpbnQ+Pj4gZ3JhcGg7CnZlY3RvcjxpbnQ+IGRpc3Q7CnZlY3RvcjxpbnQ+IHBhcmVudDsKCi8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucwp2b2lkIHRha2VJbnB1dChpbnQgZSk7CnZvaWQgZGlqa3N0cmEoaW50IHNvdXJjZSwgaW50IG4pOwp2b2lkIHByaW50UGF0aChpbnQgbm9kZSk7CnZvaWQgcHJpbnRSZXN1bHQoaW50IG4pOwoKaW50IG1haW4oKSB7CiAgICBpbnQgbm9kZXMsIGVkZ2VzOwogICAgY2luID4+IG5vZGVzID4+IGVkZ2VzOwoKICAgIGdyYXBoLnJlc2l6ZShub2RlcyArIDEpOwogICAgZGlzdC5yZXNpemUobm9kZXMgKyAxKTsKICAgIHBhcmVudC5yZXNpemUobm9kZXMgKyAxKTsKCiAgICB0YWtlSW5wdXQoZWRnZXMpOwogICAgZGlqa3N0cmEoMCwgbm9kZXMpOwogICAgcHJpbnRSZXN1bHQobm9kZXMpOwoKICAgIHJldHVybiAwOwp9CgovLyBJbnB1dCBncmFwaAp2b2lkIHRha2VJbnB1dChpbnQgZSkgewogICAgaW50IHUsIHYsIHd0OwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZTsgaSsrKSB7CiAgICAgICAgY2luID4+IHUgPj4gdiA+PiB3dDsKICAgICAgICBncmFwaFt1XS5wdXNoX2JhY2soe3YsIHd0fSk7CiAgICAgICAgZ3JhcGhbdl0ucHVzaF9iYWNrKHt1LCB3dH0pOwogICAgfQp9CgovLyBEaWprc3RyYSBBbGdvcml0aG0Kdm9pZCBkaWprc3RyYShpbnQgc291cmNlLCBpbnQgbikgewogICAgcHJpb3JpdHlfcXVldWU8cGFpcjxpbnQsIGludD4sIHZlY3RvcjxwYWlyPGludCwgaW50Pj4sIGdyZWF0ZXI8cGFpcjxpbnQsIGludD4+PiBwcTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspIHsKICAgICAgICBkaXN0W2ldID0gSU5GOwogICAgICAgIHBhcmVudFtpXSA9IC0xOwogICAgfQoKICAgIGRpc3Rbc291cmNlXSA9IDA7CiAgICBwcS5wdXNoKHswLCBzb3VyY2V9KTsKCiAgICB3aGlsZSAoIXBxLmVtcHR5KCkpIHsKICAgICAgICBpbnQgdSA9IHBxLnRvcCgpLnNlY29uZDsKICAgICAgICBwcS5wb3AoKTsKCiAgICAgICAgZm9yIChhdXRvIGVkZ2UgOiBncmFwaFt1XSkgewogICAgICAgICAgICBpbnQgdiA9IGVkZ2UuZmlyc3Q7CiAgICAgICAgICAgIGludCB3dCA9IGVkZ2Uuc2Vjb25kOwoKICAgICAgICAgICAgaWYgKGRpc3RbdV0gKyB3dCA8IGRpc3Rbdl0pIHsKICAgICAgICAgICAgICAgIGRpc3Rbdl0gPSBkaXN0W3VdICsgd3Q7CiAgICAgICAgICAgICAgICBwYXJlbnRbdl0gPSB1OwogICAgICAgICAgICAgICAgcHEucHVzaCh7ZGlzdFt2XSwgdn0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgovLyBQcmludCBzaG9ydGVzdCBwYXRoCnZvaWQgcHJpbnRQYXRoKGludCBub2RlKSB7CiAgICBpZiAobm9kZSA9PSAtMSkgcmV0dXJuOwoKICAgIHByaW50UGF0aChwYXJlbnRbbm9kZV0pOwogICAgY291dCA8PCBub2RlOwoKICAgIGlmIChwYXJlbnRbbm9kZV0gIT0gLTEpCiAgICAgICAgY291dCA8PCAiIC0+ICI7Cn0KCi8vIFByaW50IGZpbmFsIHJlc3VsdAp2b2lkIHByaW50UmVzdWx0KGludCBuKSB7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBjb3V0IDw8ICJDdXN0b21lciAiIDw8IGkgPDwgIjogIjsKCiAgICAgICAgaWYgKGRpc3RbaV0gPT0gSU5GKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIk5vdCByZWFjaGFibGUiIDw8IGVuZGw7CiAgICAgICAgfSAKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgY291dCA8PCAiTWluaW11bSBEaXN0YW5jZSA9ICIgPDwgZGlzdFtpXSA8PCAiLCBQYXRoID0gIjsKICAgICAgICAgICAgcHJpbnRQYXRoKGkpOwogICAgICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICAgICAgfQogICAgfQp9