Cod sursa(job #2612522)

Utilizator KPP17Popescu Paul KPP17 Data 9 mai 2020 09:47:48
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
//#define submit
#ifdef submit
    #define fisier "dijkstra"
#else
    #define fisier "ULTRA"
#endif

#include <fstream>
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");



const int
N = 50000,
M = 250000;

const long long
INF = (1LL << 63) - 1;

long long
n, m,
dist[N];

bool
vizitat[N];

#include <vector>
std::vector<std::pair<int, int>> vecini[N];



int idx_min_dist()
{
    int rt;
    for (rt = 0; rt < n; rt++)
        if (!vizitat[rt])
            break;

    for (int i = rt + 1; i < n; i++)
        if (!vizitat[i] && dist[i] < dist[rt])
            rt = i;

    return rt;
}



int main()
{
    in >> n >> m;

    *dist = 0;
    for (int i = 1; i < n; i++)
        dist[i] = INF;

    while (m--)
    {
        int a, b, c;
        in >> a >> b >> c; a--; b--;
        vecini[a].push_back({b, c});
    }

    for (int sursa = 0; sursa != n; sursa = idx_min_dist())
    {
        for (auto vec: vecini[sursa])
            dist[vec.first] = std::min(dist[vec.first], dist[sursa] + (long long)vec.second);
        vizitat[sursa] = true;
    }

    for (int i = 1; i < n; i++)
        out << (dist[i] == INF? 0: dist[i]) << ' ';
}