Pagini recente » Cod sursa (job #1730330) | Cod sursa (job #544101) | Cod sursa (job #1477266) | Cod sursa (job #2385258) | Cod sursa (job #1906791)
#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;
}