Pagini recente » Cod sursa (job #2645404) | Cod sursa (job #2615911) | Cod sursa (job #499927) | Cod sursa (job #2645685) | Cod sursa (job #2422954)
#include <iostream>
#include <vector>
#include <cstdio>
#include <queue>
using namespace std;
const int INFI = 0x3F3F3F;
const int NMAX = 50005;
int D[ NMAX ];
void Dijkstra( vector < pair < int, int > > *V, int n ) {
priority_queue < pair < int, int > > Q;
Q.push( { 0, 1 } );
int Vizitat[ NMAX ];
int x, y, c;
for ( int i = 1; i <= n; ++i )
Vizitat[ i ] = 0;
D[ 1 ] = 0;
while ( !Q.empty() ) {
x = Q.top().second;
Q.pop();
if ( Vizitat[ x ] )
continue;
Vizitat[ x ] = 1;
for ( int i = 0; i < V[ x ].size(); ++i ) {
if ( D[ V[ x ][ i ].first ] > V[ x ][ i ].second + D[ x ] ) {
D[ V[ x ][ i ].first ] = V[ x ][ i ].second + D[ x ];
Q.push( { -D[ V[ x ][ i ].first ], V[ x ][ i ].first } );
}
}
}
}
int main () {
freopen( "dijkstra.in", "r", stdin );
freopen( "dijkstra.out", "w", stdout );
int n, m;
int x, y, c;
vector < pair < int, int > > V[ NMAX ];
cin >> n >> m;
for ( int i = 1; i <= n; ++i ) {
D[ i ] = INFI;
}
while ( m-- ) {
cin >> x >> y >> c;
V[ x ].push_back( { y, c } );
}
Dijkstra( V, n );
for ( int i = 2; i <= n; ++i ) {
if ( D[ i ] < INFI ) cout << D[ i ] << " ";
else cout << "0 ";
}
return 0;
}