Cod sursa(job #1980406)

Utilizator rares96cheseliRares Cheseli rares96cheseli Data 13 mai 2017 00:23:00
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>
#define NMAX 50005

using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

const int inf = (1 << 30);
int N, M, dist[NMAX];
vector < pair < int, int > > G[NMAX];

struct cmp {
    bool operator()(const int &a, const int &b) const {
        return dist[a] > dist[b];
    }
};

priority_queue < int, vector < int >, cmp > Q;

void init() {
    for (int i = 1; i <= N; ++i) {
        dist[i] = inf;
    }
}

void dijkstra(int source) {
    dist[source] = 0;
    Q.push(source);

    while (!Q.empty()) {
        int node = Q.top(); Q.pop();

        for (auto it : G[node]) {
            if (dist[it.first] > dist[node] + it.second) {
                dist[it.first] = dist[node] + it.second;
                Q.push(it.first);
            }
        }
    }
}

int main() {
    f >> N >> M;
    for (int i = 1; i <= M; ++i) {
        int x, y, z;
        f >> x >> y >> z;
        G[x].push_back({y, z});
    }

    init();
    dijkstra(1);

    for (int i = 2; i <= N; ++i) {
        if (dist[i] != inf) {
            g << dist[i] << ' ';
        } else {
            g << 0 << ' ';
        }
    }
    return 0;
}