Pagini recente » Cod sursa (job #2926537) | Cod sursa (job #1170183) | Cod sursa (job #1469448) | Cod sursa (job #2335874) | Cod sursa (job #2336707)
#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 )
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 ) ) ;
v [ y ].pb ( mp ( x , c ) ) ;
}
dijk( 1 ) ;
print() ;
}