Cod sursa(job #2765269)

Utilizator Edyci123Bicu Codrut Eduard Edyci123 Data 26 iulie 2021 02:29:44
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define PI pair <int, int>
#define NMAX 50005

using namespace std;

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

int n, m;
vector <int> d(NMAX, INF);
vector <PI> Muchii[NMAX];
set <PI> s;

void dijkstra()
{
    while(!s.empty())
    {
        int nod = s.begin() -> second;
        s.erase(s.begin());
        for(auto k : Muchii[nod])
            if(d[k.first] > d[nod] + k.second)
            {
                s.erase({d[k.first], k.first});
                d[k.first] = d[nod] + k.second;
                s.insert({d[k.first], k.first});
            }
    }
}

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

    for(int i = 1; i <= m; i++)
    {
        int x, y, cost;
        f >> x >> y >> cost;
        Muchii[x].push_back(make_pair(y, cost));
        Muchii[y].push_back(make_pair(x, cost));
    }

    d[1] = 0;
    s.insert({0, 1});
    dijkstra();

    for(int i = 2; i <= n; i++)
        if(d[i] == INF)
            g << 0 << " ";
        else
            g << d[i] << " ";

    return 0;
}