Submission
Status:
PPPPPPPPPP
Subtask/Task Score:
100/100
Score: 100
User: august
Problemset: Fast Delivery
Language: cpp
Time: 0.003 second
Submitted On: 2026-03-22 14:32:53
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pi pair<int,int>
const int INF = 1e18;
void fnd(int u, int tar, vector<int> &par) {
if (u==tar) {
cout<< tar<< ' ';
return;
}
fnd(par[u], tar, par);
cout<< u<< ' ';
}
int32_t main() {
cin.tie(0)->sync_with_stdio(0);
int n,m;
cin>> n>> m;
vector<vector<pi>> g(n);
for (int i=0; i<m; i++) {
int u,v,w;
cin>> u>> v>> w;
g[u].push_back({v,w});
}
int st;
cin>> st;
vector<int> dist(n, INF), par(n);
priority_queue<pi, vector<pi>, greater<pi>> pq;
iota(par.begin(), par.end(), 0);
pq.push({0 ,st});
dist[st] = 0;
while (!pq.empty()) {
pi cur = pq.top(); pq.pop();
int d=cur.first, u=cur.second;
if (d > dist[u]) continue;
for (auto &x : g[u]) {
int v = x.first, w=x.second;
if (dist[v] > dist[u] + w) {
dist[v] = dist[u] + w;
par[v] = u;
pq.push({dist[v], v});
}
}
}
for (int i=0; i<n; i++) {
if (i==st) continue;
cout<< st<< " -> "<< i<< " (";
if (dist[i]==INF) cout<<"inf";
else cout<< dist[i];
cout<< ") ";
if (dist[i] != INF) fnd(i, st, par);
cout<< '\n';
}
}