Submission
Status:
PPPPPPPPPP
Subtask/Task Score:
100/100
Score: 100
User: navysrimuang
Problemset: Fast Delivery
Language: cpp
Time: 0.003 second
Submitted On: 2026-03-19 10:52:55
#include<bits/stdc++.h>
using namespace std;
using pii = pair<int,int>;
const int INF = 1e8;
priority_queue<pii, vector<pii>, greater<pii>> pq;
vector<int> dist;
vector<int> par;
int main(){
cin.tie(0)->sync_with_stdio(0);
int n,m;
int ss;
cin >> n >> m;
dist.resize(n,INF);
par.resize(n);
vector<vector<pii>> adj(n);
for(int i = 0;i<m;i++){
int a,b,c;
cin >> a >> b >> c;
adj[a].push_back({c,b});
}
cin >> ss;
dist[ss] = 0;
pq.push({0,ss});
while(pq.size()){
auto [dis,u] = pq.top();
pq.pop();
if(dis > dist[u]) continue;
for(auto [w,v] : adj[u]){
if(dis + w < dist[v]){
dist[v] = dis+w;
par[v] = u;
pq.push({dist[v],v});
}
}
}
for(int i = 0;i<n;i++){
if(i == ss) continue;
bool ok = 1;
cout << ss << " -> " << i << " (";
if(dist[i] == INF){ cout << "inf"; ok = 0;}
else cout << dist[i];
cout << ") ";
if(!ok){ cout << "\n"; continue;}
vector<int> path;
for(int x = i; x != ss; x = par[x]) path.push_back(x);
path.push_back(ss);
reverse(path.begin(),path.end());
for(int x : path) cout << x << " ";
cout << "\n";
}
return 0;
}