Cod sursa(job #2336769)

Utilizator Andreea.EscuAndreea Paunescu Andreea.Escu Data 5 februarie 2019 15:49:00
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define sz size()
using namespace std ;
const int NR =  50005 ;
const int oo = ( 1 << 30 ) ;
ifstream in ("dijkstra.in") ;
ofstream out ("dijkstra.out") ;

vector < pair < int , int > > v [ NR ] ;
vector < int > d ( NR , oo ) ;
bool in_que [ NR ] ;
int n , m ;
struct cmp
{
    bool operator () ( int x , int y )
    {
        return d [ x ] > d [ y ] ;
    }
};

priority_queue < int , vector < int > , cmp >  q ;
void dijk ( int start )
{
    q.push( start ) ;
    in_que [ start ] = true ;
    d [ start ] = 0 ;
    while ( !q.empty() )
    {

        int nod = q.top() ;
        in_que [ nod ] = false ;
        q.pop() ;
        for ( size_t i = 0 ; i < v [ nod ].sz ; ++ i )
        {
            int vecin = v [ nod ][ i ].first ;
            int cost = v [ nod ][ i ].second ;

            if ( d [ nod ] + cost < d [ vecin ] )
            {
                d [ vecin ] = d [ nod ] + cost ;
                if ( !in_que [ vecin ] )    { q.push( vecin ) , in_que [ vecin ] = true ; }
            }
        }
    }
}
void print ()
{
    for ( int i = 2 ; i <= n ; ++ i )

        if ( d [ i ] == oo  ) out << 0 << " " ;
        else  out << d [ i ] << " " ;
}
int main ()
{
    int  i ;
    in >> n >> m ;
    for (  i = 1 ; i <= m ; ++ i )
    {
        int x , y , c ;
        in >> x >> y >> c ;
        v [ x ].pb ( mp ( y , c ) ) ;
    }
    dijk( 1 ) ;
    print() ;
}