Cod sursa(job #1119662)

Utilizator valiro21Valentin Rosca valiro21 Data 24 februarie 2014 19:17:05
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>
#include <queue>
#include <algorithm>
#include <vector>
#include <map>

#define NMax 50002

using namespace std;

long n, m, x, y, z, now;
vector<long> dist ( NMax, 99999 );
priority_queue<long, vector<long>, greater<long> > q;
vector<pair<long, long> > vertex[NMax];

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

    scanf ( "%ld %ld", &n, &m );
    for ( long i = 1; i <= m; i++ )
        scanf ( "%ld %ld %ld", &x, &y, &z),
        vertex[x].push_back ( make_pair ( y, z ) );

    dist[1] = 0;
    q.push ( 1 );
    while ( !q.empty ( ) ) {
        now = q.top ( );
        for ( vector<pair<long, long> >::iterator i = vertex[now].begin ( ); i != vertex[now].end ( ); i++ )
            if ( dist[now] + i->second < dist[i->first] )
                dist[i->first] = dist[now] + i->second,
                q.push ( i->first );
        q.pop ( );
    }

    for ( long i =2; i <= n; i++ )
        printf ( "%ld ", dist[i] < 99999 ? dist[i] : 0 );

    return 0;
}