Cod sursa(job #3286344)

Utilizator DunareTanasescu Luca-Ioan Dunare Data 14 martie 2025 00:14:16
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");


const int NMAX = 3*10e5, INF =  2e30;
int n, d[NMAX],m;
vector<pair<int, int>> G[NMAX];

void dijkstra(int nod)
{   /// toate muchiile sunt initializate cu cost maxim
    for (int i = 1; i <= n; i++)
    {
        d[i] = INF;
    }

    set<pair<int, int>> q;

    q.emplace(nod,0);
    d[nod] = 0;

    while (!q.empty())
    {
        int u = q.begin()->first;
        q.erase(q.begin());

        for (auto[v, w] : G[u])
        {
            if (d[u] + w < d[v])
            {
                q.erase({ v, d[v] });
                d[v] = d[u] + w;
                q.emplace(v, d[v]);
            }
        }
    }
}
int main()
{
    int u,v,w;
    f>>n>>m;
    for(int i=1; i<=m; i++)
    {
        f>>u>>v>>w;
        G[u].push_back({v,w});
    }
    dijkstra(1);
    for(int i=2 ; i<=n; i++)
        if(d[i]==INF)
            g<<"0 ";
        else
            g<<d[i]<<' ';
    return 0;
}