Cod sursa(job #2370914)

Utilizator catalintermureTermure Catalin catalintermure Data 6 martie 2019 14:32:51
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>

using namespace std;

ifstream inf("dijkstra.in");
ofstream outf("dijkstra.out");

struct Drum {
    int dest, cost;
};

vector<Drum> ad[50001];
int dist[50001];

struct Nod {
    int nod, cost;
};

struct comp {
    bool operator()(Nod a, Nod b) {
        return a.cost > b.cost;
    }
};

priority_queue<Nod, vector<Nod>, comp> pq;

void dij(int x) {
    pq.push({x, 0});
    memset(dist, 64, sizeof(dist));
    dist[x] = 0;
    while(!pq.empty()) {
        x = pq.top().nod;
        pq.pop();
        for(Drum& d : ad[x]) {
            if(dist[d.dest] > dist[x] + d.cost) {
                dist[d.dest] = dist[x] + d.cost;
                pq.push({d.dest, dist[d.dest]});
            }
        }
    }
}

int main() {
    int n, m, x, y, l;
    inf >> n >> m;
    for(int i = 0; i < m; i++) {
        inf >> x >> y >> l;
        ad[x].push_back({y, l});
    }
    dij(1);
    for(int i = 2; i <= n; i++) {
        if(dist[i] == 1077952576) {
            outf << "0 ";
        }
        else {
            outf << dist[i] << ' ';
        }
    }
    return 0;
}