Cod sursa(job #2555833)

Utilizator s.gabi7Dumitrescu Daniel s.gabi7 Data 24 februarie 2020 13:35:47
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
#define NMAX 50001
#define INF 0x3F3F3F3F
using namespace std;

class cmp {
public:
    bool operator () (const pair <int, int> &a, const pair <int, int> &b) {
        return a.second>b.second;
    }
};

vector <pair <int, int>> G[NMAX];
priority_queue <pair <int, int>, vector <pair <int, int>>, cmp> PQ;
array <int, NMAX> dist;
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));
    }
    dist.fill(INF);
    dist[1]=0;
    PQ.push(make_pair(1, 0));

    while (!PQ.empty()) {
        auto save=PQ.top();
        PQ.pop();

        if (dist[save.first]==save.second)
            for (auto it: G[save.first])
                if (dist[it.first]>save.second+it.second) {
                    dist[it.first]=save.second+it.second;
                    PQ.push(make_pair(it.first, dist[it.first]));
                }
    }

    for (i=2; i<=n; i++) {
        if (dist[i]==INF)
            dist[i]=-1;
        fout << dist[i] << ' ';
    }
    return 0;
}