Submission

Status:
PPPPPPPPPP

Score: 100

User: AungS8430

Problemset: Fast Delivery

Language: cpp

Time: 0.002 second

Submitted On: 2025-03-17 21:49:30

#include <bits/stdc++.h>
using namespace std;

void print_path(vector<int> &parents, int x, int k) {
  if (x == k) {
    return;
  } else {
    print_path(parents, parents[x], k);
    cout << parents[x] << " ";
    return;
  }
}

int main(void) {
  int n, m, k;
  cin >> n >> m;
  vector<vector<pair<int, int>>> adj(n, vector<pair<int, int>> ());
  for (int i = 0; i < m; i++) {
    int a, b, c;
    cin >> a >> b >> c;
    adj[a].push_back({b, c});
  }
  cin >> k;
  vector<int> distance(n, INT_MAX);
  distance[k] = 0;
  queue<int> q;
  set<int> visited;
  vector<int> parents(n);
  q.push(k);
  while (!q.empty()) {
    int x = q.front(); q.pop();
    if (binary_search(visited.begin(), visited.end(), x)) continue;
    for (pair<int, int> a_node : adj[x]) {
      if (distance[x] + a_node.second < distance[a_node.first] && distance[x] != INT_MAX) {
        distance[a_node.first] = distance[x] + a_node.second;
        parents[a_node.first] = x;
        q.push(a_node.first);
      }
    }
    visited.insert(x);
  };
  for (int i = 0; i < n; i++) {
    if (i != k) {
      cout << k << " -> " << i << " (";
      if (distance[i] == INT_MAX) cout << "inf) " << endl;
      else {
        cout << distance[i];
        cout << ") ";
        print_path(parents, i, k);
        cout << i << endl;
      }
    }
  }
  return 0;
}