Cod sursa(job #3192798)

Utilizator Ionut10Floristean Ioan Ionut10 Data 13 ianuarie 2024 11:18:36
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>
#define NMax 200000
#define inf 1e9

using namespace std;

ifstream fin ( "dijkstra.in" );
ofstream fout ( "dijkstra.out" );

int n, m;
int u, v, c;
vector<pair<int, int> > adj[NMax + 1]; ///{nod, cost};
priority_queue<pair<int, int> > pq; ///{dist. minima, val. nod};
int dmin[NMax + 1];

int main()
{
    fin >> n >> m;
    for ( int i = 1; i <= m; i++ )
    {
        fin >> u >> v >> c;
        adj[u].push_back({v, c});
    }
    for ( int i = 2; i <= n; i++ ) dmin[i] = inf;
    pq.push({0, 1});

    while ( !pq.empty() )
    {
        pair<int, int> x = pq.top(); pq.pop();

        if ( -x.first != dmin[x.second] ) continue;

        for ( pair<int, int> u: adj[x.second] )
        {
            if ( dmin[x.second] + u.second < dmin[u.first] )
            {
                dmin[u.first] = dmin[x.second] + u.second;
                pq.push({-dmin[u.first] ,u.first});
            }
        }
    }

    for ( int i = 2; i <= n; i++ )
        if ( dmin[i] == inf ) fout << 0 << " ";
        else fout << dmin[i] << " ";

    return 0;
}