Cod sursa(job #1906791)

Utilizator catu_bogdan_99Catu Bogdan catu_bogdan_99 Data 6 martie 2017 16:24:12
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <cstdio>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;

#define NMAX 50001
#define INFI 0x3f3f3f3f

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

void Dijkstra ( int start ) {

    int i, j, fiu, nod, cost;

    memset( D, INFI, sizeof( D ) );

    D[ start ] = 0;
    Q.push( { 0, start } );

    while ( !Q.empty() ) {
        nod = Q.top().second;
        Q.pop();

        if ( Viz[ nod ] ) continue;
        Viz[ nod ] = 1;

        for ( i = 0; i < V[ nod ].size();  ++i ) {
            cost = V[ nod ][ i ].second;
            fiu = V[ nod ][ i ].first;
            if ( D[ fiu ] > D[ nod ] + cost ) {
                D[ fiu ] = D[ nod ] + cost;
                Q.push( { -D[ fiu ], fiu } );
            }
        }
    }


}

int main () {

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

    int n,m, i, j, x, y, c;

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

    Dijkstra( 1 );

    for ( i = 2; i <= n; ++i ) {
        if ( D[ i ] != INFI ) printf( "%d ",D[ i ] );
        else printf( "0 " );
    }

    return 0;

}