Cod sursa(job #1980409)

Utilizator rares96cheseliRares Cheseli rares96cheseli Data 13 mai 2017 00:26:54
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 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], inQ[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;
    inQ[source] = 1;
    Q.push(source);

    while (!Q.empty()) {
        int node = Q.top(); Q.pop();
        inQ[node] = 0;

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

                if (!inQ[it.first]) {
                    Q.push(it.first);
                    inQ[it.first] = 1;
                }
            }
        }
    }
}

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