Cod sursa(job #2255901)

Utilizator catu_bogdan_99Catu Bogdan catu_bogdan_99 Data 7 octombrie 2018 18:06:33
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;

#define INFI 0X3F3F3F3F
#define NMAX 50001

int D[ NMAX ], T[ NMAX ];
priority_queue < pair < int, int > > Q;
vector < pair < int, int > > V[ NMAX ];

int main () {

    freopen( "dijkstra.in", "r", stdin );
    freopen( "dijkstra.out", "w", stdout );

    int n, m, i, j, x, y, c, fiu, nod, cos;

    scanf( "%d%d", &n,&m );
    while ( m-- ) {
        scanf( "%d%d%d", &x,&y,&c );
        V[ x ].push_back( { y, c } );
    }

    for ( i = 2; i <= n; ++i ) D[ i ] = INFI;

    Q.push( { 0, 1 } );
    while ( !Q.empty() ) {
        nod = Q.top().second;
        Q.pop();
        if ( T[ nod ] ) continue;
        T[ nod ] = 1;
        for ( i = 0; i < V[ nod ].size(); ++i ) {
            fiu = V[ nod ][ i ].first;
            cos = V[ nod ][ i ].second;
            if ( D[ nod ] + cos < D[ fiu ] ) {
                D[ fiu ] = cos + D[ nod ];
                Q.push( { -D[ fiu ], fiu } );
            }
        }
    }

    for ( i = 2; i <= n; ++i )
        printf( "%d ", D[ i ] );

    return 0;
}