Pagini recente » Cod sursa (job #635247) | Cod sursa (job #3000730) | Cod sursa (job #1673058) | Cod sursa (job #1117735) | Cod sursa (job #2126155)
#include <bits/stdc++.h>
using namespace std;
ifstream fi( "dijkstra.in" );
ofstream fo( "dijkstra.out");
const int maxn = 5e4 + 5;
const int maxm = 2.5e5 + 5;
const int inf = 0x3f3f3f3f;
vector < pair < int, int > > g[maxn];
priority_queue < pair < int, int > > heap;
//priority_queue < pair <int, int>, vector < pair<int, int> >, greater <pair<int, int> > > heap;
int n, m, dist[maxn];
void dijkstra( int start ) {
int node, d, son, cost;
heap.push( { 0, start } );
while (!heap.empty()) {
node = heap.top().second;
d = -heap.top().first;
heap.pop();
if (d > dist[ node ])
continue;
for (int i = 0; i < g[ node ].size(); i++) {
son = g[ node ][ i ].first;
cost = g[ node ][ i ].second;
if (dist[ son ] > d + cost) {
dist[ son ] = d + cost;
heap.push( { -dist[ son ], son } );
}
}
}
}
int main()
{
int x, y, z;
fi >> n >> m;
for (int i = 1; i <= m; i++) {
fi >> x >> y >> z;
g[ x ].push_back( { y, z } );
g[ y ].push_back( { x, z } );
}
for (int i = 2; i <= n; i++)
dist[ i ] = inf;
dist[ 1 ] = 0;
dijkstra( 1 );
for (int i = 2; i <= n; i++) {
if (dist[ i ] == inf) {
fo << 0 << " ";
}
else
fo << dist[ i ] << " ";
}
return 0;
}