Cod sursa(job #2422954)

Utilizator catu_bogdan_99Catu Bogdan catu_bogdan_99 Data 20 mai 2019 14:42:34
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <vector>
#include <cstdio>
#include <queue>
using namespace std;

const int INFI = 0x3F3F3F;
const int NMAX = 50005;
int D[ NMAX ];


void Dijkstra( vector < pair < int, int > > *V, int n ) {

    priority_queue < pair < int, int > > Q;
    Q.push( { 0, 1 } );

    int Vizitat[ NMAX ];
    int x, y, c;

    for ( int i = 1; i <= n; ++i )
        Vizitat[ i ] = 0;

    D[ 1 ] = 0;

    while ( !Q.empty() ) {
        x = Q.top().second;
        Q.pop();
        if ( Vizitat[ x ] )
            continue;
        Vizitat[ x ] = 1;
        for ( int i = 0; i < V[ x ].size(); ++i ) {
            if ( D[ V[ x ][ i ].first ] > V[ x ][ i ].second + D[ x ] ) {
                D[ V[ x ][ i ].first ] = V[ x ][ i ].second + D[ x ];
                Q.push( { -D[ V[ x ][ i ].first ], V[ x ][ i ].first } );
            }
        }
    }


}


int main () {

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

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

    vector < pair < int, int > > V[ NMAX ];

    cin >> n >> m;
    for ( int i = 1; i <= n; ++i ) {
        D[ i ] = INFI;
    }
    while ( m-- ) {
        cin >> x >> y >> c;
        V[ x ].push_back( { y, c } );
    }

    Dijkstra( V, n );
    for ( int i = 2; i <= n; ++i ) {
        if ( D[ i ] < INFI ) cout << D[ i ] << " ";
        else cout << "0 ";
    }


    return 0;

}