Cod sursa(job #2553766)

Utilizator s.gabi7Dumitrescu Daniel s.gabi7 Data 22 februarie 2020 11:48:15
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
#define NMAX 50005
#define INF 0x3F3F3F3F
using namespace std;

vector <pair <int, int>> G[NMAX];
int dist[NMAX];

int main (void) {
    ifstream fin ("dijkstra.in");
    ofstream fout ("dijkstra.out");
    int n, m, i, j, c;
    fin >> n >> m;
    for (; m; m--) {
        fin >> i >> j >> c;
        G[i].push_back(make_pair(j, c));
    }

    memset (dist, INF, sizeof(dist));
    dist[1]=0;
    set <pair <int, int>> h;
    h.insert(make_pair(0, 1));

    int nod, d, to, cost;
    while (!h.empty()) {
        nod=h.begin()->second;
        d=h.begin()->first;
        h.erase(h.begin());

        for (auto it: G[nod]) {
            to=it.first;
            cost=it.second;
            if (dist[nod]+cost<dist[to]) {
                if (dist[to]!=INF)
                    h.erase(make_pair(dist[to], to));
                dist[to]=dist[nod]+cost;
                h.insert(make_pair(dist[to], to));
            }
        }
    }

    for (i=2; i<=n; i++)
        fout << (dist[i]==INF?0:dist[i]) << ' ';
    return 0;
}