Cod sursa(job #2702980)

Utilizator IRadu1529Radu Ionescu IRadu1529 Data 6 februarie 2021 14:42:00
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

typedef long long ll;
#define pb push_back

const int N = 1e5, M = 2e5;

struct Edge {
    int first;
    int second;
    int ind;
};

vector <Edge> gr[1 + N];

ll dist[1 + N];

void solve() {
    int n, m;
    fin >> n >> m;
    for (int i = 1; i <= m; i++) {
        int x, y, c;
        fin >> x >> y >> c;
        gr[x].pb({ y, c, i });
    }
    for (int i = 1; i <= n; i++)  dist[i] = (1ll << 62);

    priority_queue <pair <int, ll>> pq;

    pq.push({ 0, 1 });
    dist[1] = 0;

    while (pq.size()) {
        int node = pq.top().second;
        pq.pop();
        for (auto vec : gr[node])
            if (dist[vec.first] > dist[node] + vec.second) {
                dist[vec.first] = dist[node] + vec.second;
                pq.push({ -dist[vec.first], vec.first });
            }
    }

    for (int i = 2; i <= n; ++i) {
        if (dist[i] == 1ll << 62) {
            dist[i] = 0;
        }
        fout << dist[i] << ' ';
    }
    fout << '\n';
}

int main() {
    solve();
    return 0;
}