Pagini recente » Cod sursa (job #111054) | Cod sursa (job #259838) | Cod sursa (job #2090774) | Cod sursa (job #868381) | Cod sursa (job #3216145)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream fin ( "dijkstra.in" );
ofstream fout ( "dijkstra.out" );
const int N = 50000;
int dist[N + 10];
struct edge{
int x, cost;
};
struct inQueue {
int node, dist;
bool operator < ( const inQueue &other ) const {
return other.dist < dist;
}
};
vector <edge> g[N + 10];
priority_queue <inQueue> q;
int dijkstra () {
q.push ( {1, 0} );
dist[1] = 0;
while ( q.size() > 0 ) {
int node = q.top().node;
q.pop();
for ( int i = 0; i < g[node].size(); i++ ) {
if ( dist[g[node][i].x] > dist[node] + g[node][i].cost ) {
dist[g[node][i].x] = dist[node] + g[node][i].cost;
q.push ( { g[node][i].x, dist[g[node][i].x] } );
}
}
}
return 0;
}
int main() {
int n, m, a, b, c;
fin >> n >> m;
for ( int i = 0; i < m; i++ ) {
fin >> a >> b >> c;
g[a].push_back({b, c});
g[b].push_back({a, c});
}
for ( int i = 1; i <= n; i++ )
dist[i] = 1e9;
dijkstra ();
for ( int i = 2; i <= n; i++ )
fout << dist[i] << " ";
return 0;
}