Cod sursa(job #2751194)

Utilizator iancupoppPopp Iancu Alexandru iancupopp Data 14 mai 2021 15:48:49
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
#include <vector>
#include <set>

using namespace std;

const int N = 5e4;
const int INF = 1 << 30;

struct elem {
    int nod;
    int dist;
    bool operator<(const elem& e) const {
        if (dist != e.dist)
            return dist < e.dist;
        return nod < e.nod;
    }
};

vector<elem> gr[N + 1];
set<elem> s;
int d[N + 1];
bool viz[N + 1];

void dijkstra(int nod, int n) {
    for (int i = 1; i <= n; ++i)
        d[i] = INF;
    d[nod] = 0;
    s.insert({ nod, 0 });
    while (!s.empty()) {
        auto crt = *s.begin();
        s.erase(s.begin());
        if (!viz[crt.nod]) {
            viz[crt.nod] = true;
            for (auto vec : gr[crt.nod])
                if (!viz[vec.nod] && crt.dist + vec.dist < d[vec.nod]) {
                    d[vec.nod] = crt.dist + vec.dist;
                    s.insert({ vec.nod, d[vec.nod] });
                }
        }
    }
}

int main() {
    ifstream cin("dijkstra.in");
    ofstream cout("dijkstra.out");
    int n, m;
    cin >> n >> m;
    while (m--) {
        int x, y, z;
        cin >> x >> y >> z;
        gr[x].push_back({ y, z });
    }
    cin.close();
    dijkstra(1, n);
    for (int i = 2; i <= n; ++i)
        cout << (d[i] == INF ? 0 : d[i]) << ' ';
    cout.close();
    return 0;
}