Pagini recente » Cod sursa (job #3299165) | Cod sursa (job #3297361) | Cod sursa (job #2427672) | Cod sursa (job #3297297) | Cod sursa (job #3297287)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 5e4;
const long long INF = 1e18;
long long minDist[NMAX + 1];
vector <pair<int, int>> edges[NMAX + 1];
int viz[NMAX + 1];
int main() {
ifstream fin( "dijkstra.in" );
ofstream fout( "dijkstra.out" );
int n, m;
fin >> n >> m;
for ( int i = 1, a, b, c; i <= m; i ++ ) {
fin >> a >> b >> c;
edges[a].push_back( {b, c} );
edges[b].push_back( {a, c} );
}
priority_queue <pair <long long, int>> pq;
for ( int i = 1; i <= n; i ++ ) {
minDist[i] = INF;
}
minDist[1] = 0;
pq.push( {1, 0} );
while ( !pq.empty() ) {
int node = pq.top().second;
pq.pop();
if ( !viz[node] ) {
viz[node] = true;
for ( auto e : edges[node] ) {
if ( minDist[node] + e.second < minDist[e.first] ) {
minDist[e.first] = minDist[node] + e.second;
pq.push( {minDist[e.first], e.first} );
}
}
}
}
for ( int i = 2; i <= n; i ++ ) {
if ( minDist[i] == INF ) minDist[i] = 0;
fout << minDist[i] << ' ';
}
fout << '\n';
return 0;
}