Pagini recente » Cod sursa (job #2003591) | Cod sursa (job #1294462) | Cod sursa (job #1650335) | Cod sursa (job #193069) | Cod sursa (job #3312845)
#include <bits/stdc++.h>
#define MAXN 50000
using namespace std;
int dist[MAXN + 1];
struct cel {
int nod , val;
bool operator <(cel const &x) const {
return x.val < val;
};
};
vector< cel >edges[MAXN + 1];
priority_queue< cel >pq;
int main() {
ifstream cin( "dijkstra.in" );
ofstream cout( "dijkstra.out" );
int n , m , i , a , b , c;
cel k;
cin >> n >> m;
for( i = 1 ; i <= m ; i++ ) {
cin >> a >> b >> c;
edges[a].push_back( { b , c } );
//edges[b].push_back( { a , c } );
}
for( i = 2 ; i <= n ; i++ )
dist[i] = INT_MAX;
pq.push( { 1 , 0 } );
dist[1] = 0;
while( !pq.empty() ) {
k = pq.top();
pq.pop();
if( k.val <= dist[k.nod] ) {
for( auto x : edges[k.nod] ) {
//cout << dist[k] << ' ' << k << ' ' << x.nod << ' ' << x.val << '\n';
if( dist[x.nod] > dist[k.nod] + x.val ) {
//cout << x.nod << ' ' << x.val << '\n';
dist[x.nod] = dist[k.nod] + x.val;
pq.push( { x.nod , dist[x.nod] } );
}
}
}
}
for( i = 2 ; i <= n ; i++ ) {
if( dist[i] == INT_MAX )
dist[i] = 0;
cout << dist[i] << ' ';
}
cout << '\n';
return 0;
}