Pagini recente » Cod sursa (job #1391134) | Cod sursa (job #1609608) | Cod sursa (job #1469241) | Cod sursa (job #1198612) | Cod sursa (job #2730558)
#include <iostream>
#include <fstream>
#include <set>
#include <vector>
using namespace std;
const int N_MAX = 5e5;
const int M_MAX = 25e4;
const int INF = 2e9;
struct graf_edge {
int cost, to;
};
vector<graf_edge> graf[1 + N_MAX];
int dist[1 + N_MAX];
int visited[1 + N_MAX];
void reset_dist () {
for ( int i = 0; i <= N_MAX; i ++ )
dist[i] = INF;
}
void run_dijkstra () {
set<pair<int,int>> pq;
dist[1] = 0;
pq.insert ( {0, 1} );
while ( !pq.empty () ) {
pair<int, int> my_pair = (*pq.begin ());
pq.erase ( pq.begin () );
int node = my_pair.second;
if ( !visited[node] ) {
visited[node] = 1;
for ( auto x : graf[node] ) {
if ( dist[node] + x.cost < dist[x.to] ) {
dist[x.to] = dist[node] + x.cost;
pq.insert ( { -dist[x.to], x.to } );
}
}
}
}
}
ifstream fin ( "dijkstra.in" );
ofstream fout ( "dijkstra.out" );
int main()
{
int n, m; fin >> n >> m;
for ( int i = 1; i <= m; i ++ ) {
int a, b, x; fin >> a >> b >> x;
graf[a].push_back ( {x, b} );
}
reset_dist ();
run_dijkstra ();
for ( int i = 2; i <= n; i ++ )
fout << dist[i] << ' ';
return 0;
}