Cod sursa(job #2325306)

Utilizator radugheoRadu Mihai Gheorghe radugheo Data 22 ianuarie 2019 14:31:28
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin  ("dijkstra.in");
ofstream fout ("dijkstra.out");

int n, m, i, a, b, c, k, vecin, cost;
int D[50005];

multiset <pair <int, int> > s;
multiset <pair <int, int> > :: iterator it;

vector <pair <int, int> > L[50005];

int main(){
    fin >> n >> m;
    for (i=1; i<=m; i++){
        fin >> a >> b >> c;
        L[a].push_back ({b, c});
    }
    for (i=1; i<=n; i++){
        D[i] = INT_MAX;
    }
    D[1] = 0;
    s.insert ({0, 1});
    while (!s.empty()){
        k = s.begin() -> second;
        s.erase ({s.begin()->first, k});
        for (i=0; i<L[k].size(); i++){
            vecin = L[k][i].first;
            cost  = L[k][i].second;
            if (D[vecin] > D[k] + cost){
                s.erase ({D[vecin], vecin});
                D[vecin] = D[k] + cost;
                s.insert({D[vecin], vecin});
            }
        }
    }
    for (i=2; i<=n; i++){
        if (D[i] == INT_MAX){
            fout << 0 << " ";
        }
        else{
            fout << D[i] << " ";
        }
    }
    return 0;
}