Cod sursa(job #2702973)

Utilizator IRadu1529Radu Ionescu IRadu1529 Data 6 februarie 2021 14:30:53
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>

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 = 1; i <= m; i++) {
        if (d[i] == (1ll << 62))
            fout << "0 ";
        else fout << d[i] << " ";
    }
}

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