Cod sursa(job #2370963)

Utilizator catalintermureTermure Catalin catalintermure Data 6 martie 2019 14:52:00
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 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];
bool viz[50001];

priority_queue<int, deque<int>, greater<int> > pq;

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

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;
}