Pagini recente » Cod sursa (job #1601666) | Cod sursa (job #1057969) | Cod sursa (job #536397) | Cod sursa (job #2979983) | Cod sursa (job #410978)
Cod sursa(job #410978)
#include <algorithm>
#include <bitset>
#include <queue>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f
#define MAX_N 50005
#define MAX_S 10005
char s[ MAX_S ];
int N, M;
int cnt_s, dst[ MAX_N ];
bitset <MAX_N> f;
vector < pair <int, int> > v[ MAX_N ];
struct cmp {
bool operator()( const int &x, const int &y ) {
return dst[ x ] > dst[ y ];
}
};
priority_queue < int, vector <int>, cmp > h;
void read( int &val ) {
while( !isdigit( s[ cnt_s ] ) )
if( ++cnt_s == MAX_S ) {
fread( s, 1, MAX_S, stdin );
cnt_s = 0;
}
val = 0;
while( isdigit( s[ cnt_s ] ) ) {
val = val * 10 + s[ cnt_s ] - '0';
if( ++cnt_s == MAX_S ) {
fread( s, 1, MAX_S, stdin );
cnt_s = 0;
}
}
}
int main() {
freopen( "dijkstra.in", "r", stdin );
freopen( "dijkstra.out", "w", stdout );
int i, x, y, c, nod;
vector < pair <int, int> > :: iterator it;
cnt_s = MAX_S - 1;
read( N );
read( M );
while( M-- ) {
read( x );
read( y );
read( c );
v[ x ].push_back( make_pair( y, c ) );
}
memset( dst, INF, sizeof( dst ) );
h.push( 1 );
f[ 1 ] = true;
dst[ 1 ] = 0;
while( !h.empty() ) {
nod = h.top();
h.pop();
f[ nod ] = false;
for( it = v[ nod ].begin(); it != v[ nod ].end(); ++it )
if( dst[ nod ] + it->second < dst[ it->first ] ) {
dst[ it->first ] = dst[ nod ] + it->second;
if( f[ it->first ] == false ) {
f[ it->first ] = true;
h.push( it->first );
}
}
}
for( i = 2; i <= N; ++i )
if( dst[ i ] == INF )
printf( "0 " );
else
printf( "%d ", dst[ i ] );
return 0;
}