Pagini recente » Cod sursa (job #57316) | Cod sursa (job #2803685) | Cod sursa (job #2245593) | Cod sursa (job #2962803) | Cod sursa (job #2255903)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
#define INFI 0X3F3F3F3F
#define NMAX 50001
int D[ NMAX ], T[ NMAX ];
priority_queue < pair < int, int > > Q;
vector < pair < int, int > > V[ NMAX ];
int main () {
freopen( "dijkstra.in", "r", stdin );
freopen( "dijkstra.out", "w", stdout );
int n, m, i, j, x, y, c, fiu, nod, cos;
scanf( "%d%d", &n,&m );
while ( m-- ) {
scanf( "%d%d%d", &x,&y,&c );
V[ x ].push_back( { y, c } );
}
for ( i = 2; i <= n; ++i ) D[ i ] = INFI;
Q.push( { 0, 1 } );
while ( !Q.empty() ) {
nod = Q.top().second;
Q.pop();
if ( T[ nod ] ) continue;
T[ nod ] = 1;
for ( i = 0; i < V[ nod ].size(); ++i ) {
fiu = V[ nod ][ i ].first;
cos = V[ nod ][ i ].second;
if ( D[ nod ] + cos < D[ fiu ] ) {
D[ fiu ] = cos + D[ nod ];
Q.push( { -D[ fiu ], fiu } );
}
}
}
for ( i = 2; i <= n; ++i )
if ( D[ i ] < INFI )printf( "%d ", D[ i ] );
else printf( "0 " );
return 0;
}