Cod sursa(job #3031089)

Utilizator tudor036Borca Tudor tudor036 Data 18 martie 2023 17:13:12
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <iomanip>

#define NMAX 50000

using namespace std;

ifstream F("dijkstra.in");
ofstream G("dijkstra.out");

const int INF = 0x3F3F3F3F;
vector<vector<pair<int, int>>> list;
vector<int> d, p;

int N, M;

void Read() {
    int x, y, w;

    F >> N >> M;

    list.resize(N + 1);

    for (int i = 0; i < M; i++) {
        F >> x >> y >> w;

        list[x].push_back(make_pair(y, w));
    }
}

void Dijkstra(int s) {
    int c, to, cost;
    d.assign(N + 1, INF);
    p.assign(N + 1, -1);

    d[s] = 0;
    set<pair<int, int>> st;
    st.insert({ d[s], s });

    while (!st.empty()) {
        c = st.begin()->second;
        st.erase(st.begin());

        for (pair<int, int> edge : list[c]) {
            to = edge.first;
            cost = edge.second;

            if (d[c] + cost < d[to]) {
                st.erase({ d[to], to });
                d[to] = d[c] + cost;
                p[to] = c;
                st.insert({ d[to], to });
            }
        }
    }
}

void Print() {
    for (int i = 2; i <= N; i++) {
        G << (d[i] == INF ? 0 : d[i]) << " ";
    }
}

int main()
{
    clock_t t = clock();

    Read();
    Dijkstra(1);
    Print();

    return 0;
}