Cod sursa(job #2833159)

Utilizator Cosmin2004_InfoMoldoveanu Cosmin Cosmin2004_Info Data 14 ianuarie 2022 20:41:58
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;
#ifdef INFOARENA
#define cin fin
#define cout fout
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#endif // INFOARENA
const int N = 5e4;
using ll = long long;
const ll inf = 1e18;
vector <pair <int, int>> g[N + 5];
ll dp[N + 5];

int main()
{
    int n, m, u, v, w;
    cin >> n >> m;
    for(int i = 1; i <= m; i++)
        cin >> u >> v >> w,
        g[u].push_back({v, w});
    priority_queue <pair <ll, int>> pq;
    pq.push({0, 1});
    for(int i = 2; i <= n; i++) dp[i] = inf;
    while(!pq.empty()) {
        auto [d, u] = pq.top(); pq.pop();
        if(d != -dp[u]) continue;
        for(auto [v, w] : g[u])
            if(w - d < dp[v]) {
                dp[v] = w - d;
                pq.emplace(-dp[v], v);
            }
    }
    for(int i = 2; i <= n; i++)
        cout << (dp[i] == inf ? 0 : dp[i]) << " ";
    return 0;
}