Cod sursa(job #3039618)

Utilizator mihaistamatescuMihai Stamatescu mihaistamatescu Data 28 martie 2023 18:30:38
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <set>
#include <vector>

#define DIM 50010
#define INF 1e9
using namespace std;

int n, m, x, y, cost;

struct vecin {
    int vec, cost;
};

bool solved[DIM];
int D[DIM];
vector<vecin> L[DIM];
set<pair<int, int> > s;

int main() {
    ifstream fin("dijkstra.in");
    ofstream fout("dijkstra.out");
    fin >> n >> m;
    for (int i = 1; i <= m; i++) {
        fin >> x >> y >> cost;
        L[x].push_back({y, cost});
    }
    for (int i = 2; i <= n; i++) {
        D[i] = INF;
    }
    s.insert({0, 1});
    while (!s.empty()) {
        int crt = s.begin()->second;
        s.erase(s.begin());
        if (solved[crt]) {
            continue;
        }
        solved[crt] = true;
        for (auto v: L[crt]) {
            if (D[v.vec] > D[crt] + v.cost) {
                s.erase({D[v.vec], v.vec});
                D[v.vec] = D[crt] + v.cost;
                s.insert({D[v.vec], v.vec});
            }
        }
    }
    for (int i = 2; i <= n; i++) {
        fout << (D[i] == INF ? 0 : D[i]) << " ";
    }
    return 0;
}