Submission

Status:
PPPPPPPPPP

Score: 100

User: qwerty

Problemset: Fast Delivery

Language: cpp

Time: 0.002 second

Submitted On: 2025-03-14 21:39:41

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

int dijkstraa(vector<vector<pair<int, int>>> &path, vector<vector<int>> &ans, int sor, int des) {
    int n = path.size();
    vector<int> parent(n, -1);
    vector<int> curr;
    vector<int> dis(n, INT_MAX);
    vector<bool> visited(n, false);
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;

    dis[sor] = 0;
    pq.push({0, sor});
    while (!pq.empty()) {
        int u = pq.top().second;
        pq.pop();
        if (visited[u]) continue;
        visited[u] = true;

        for (auto i : path[u]) {
            int v = i.first;
            int w = i.second;
            if (!visited[v] && dis[v]>dis[u]+w) {
                dis[v] = dis[u]+w;
                parent[v] = u;
                pq.push({dis[v], v});
            }
        }
    }
    if (dis[des] == INT_MAX) return -1;

    for (int v = des ; v!=-1 ; v = parent[v]) {
        curr.push_back(v);
    }
    reverse(curr.begin(), curr.end());
    ans.push_back(curr);
    return dis[des];
}

int main() {
    int n, m;
    cin >> n >> m;
    vector<vector<pair<int, int>>> path(n);
    for (int i = 0 ; i < m ; i++) {
        int u,v,w;
        cin >> u >> v >> w;
        path[u].push_back({v, w});
    }
    int sor;
    cin >> sor;

    vector<vector<int>> ans(n);
    for (int i = 0 ; i < n ; i++) {
        if (sor!=i) {
            int dis = dijkstraa(path, ans, sor, i);
            if (dis == -1) {
                cout << sor << " -> " << i << " (inf) ";
            } else {
                cout << sor << " -> " << i << " (" << dis << ") ";
                for (auto j : ans.back()) {
                    cout << j << " ";
                }
            }
            cout << endl;
        }
    }
}