Cod sursa(job #1920038)

Utilizator blatulInstitutul de Arta Gastronomica blatul Data 9 martie 2017 22:11:36
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

const int kMaxN = 50000, kInf = 0x3f3f3f3f;

vector<pair<int, int>> G[kMaxN];
int Dist[kMaxN];

int main() {
    #ifdef INFOARENA
    ifstream cin("dijkstra.in");
    ofstream cout("dijkstra.out");
    #endif
    cin.tie(0);
    ios_base::sync_with_stdio(false);
    
    int n, m;
    cin >> n >> m;
    for(int i = 0; i < m; ++i) {
        int x, y, c;
        cin >> x >> y >> c;
        x--; y--;
        G[x].push_back(make_pair(y, c));
    }
    
    memset(Dist, 0x3f, sizeof Dist);
    Dist[0] = 0;
    
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> H;
    H.push(make_pair(0, 0));
    while(!H.empty()) {
        int node = H.top().second;
        int dist = H.top().first;
        H.pop();
        
        if(Dist[node] != dist) continue;
        
        for(const auto& edge: G[node])
            if(Dist[edge.first] > dist + edge.second) {
                Dist[edge.first] = dist + edge.second;
                H.push({Dist[edge.first], edge.first});
            }
    }
    
    for(int i = 1; i < n; ++i)
        if(Dist[i] == kInf)
            cout << "0 ";
        else
            cout << Dist[i] << ' ';
    cout << '\n';
}