Cod sursa(job #3236035)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 25 iunie 2024 19:21:12
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <vector>

using namespace std;
using PII = pair<int, int>;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

static constexpr int nMAX = ((int)(5e4) + 1),
                     INF = ((int)(1e9));

int n;
vector<PII> G[nMAX];

int d[nMAX];
bool used[nMAX];

static inline void read()
{
    f.tie(nullptr);

    f >> n;

    int m = 0;
    f >> m;

    int u = 0, v = 0, t = 0;
    for (int e = 1; e <= m; ++e)
        f >> u >> v >> t,
            G[u].push_back({t, v});

    return;
}

int main()
{
    read();

    for (int i = 1; i <= n; ++i)
        if ((int)G[i].size() > 1)
            sort(G[i].begin(), G[i].end());

    for (int i = 2; i <= n; ++i)
        d[i] = INF;

    for (int i = 1; i <= n; ++i)
    {
        int min_Node = -1, min_dist = INF;

        for (int j = 1; j <= n; ++j)
            if (!used[j])
                if (d[j] < min_dist)
                    min_dist = d[j], min_Node = j;

        used[min_Node] = true;
        for (const PII &e : G[min_Node])
            if (d[min_Node] + e.first < d[e.second])
                d[e.second] = d[min_Node] + e.first;
    }

    for (int i = 2; i <= n; ++i)
    {
        g << d[i];

        if (i != n)
            g << ' ';
        else
            g << '\n';
    }

    return 0;
}