Pagini recente » Cod sursa (job #3350014) | Cod sursa (job #1911669) | Cod sursa (job #3332549) | Cod sursa (job #3341462) | Cod sursa (job #3325487)
#include <iostream>
#include <vector>
#include <queue>
#define pii pair<int, int>
using namespace std;
const int NMAX = 5e5 + 5; // 5 * 10^ 5 + 5
const char nl = '\n';
const int INF = 1e9 + 7; // 10 ^ 9 + 7
vector<pii> g[NMAX];
int dist[NMAX];
void dijkstra(int source, int size) {
for(int i = 1; i <= size; ++i) {
dist[i] = INF;
}
priority_queue<pii> pq;
dist[source] = 0;
pq.push({0, source});
while(!pq.empty()) {
int cur_node = pq.top().second;
int cur_weight = pq.top().first;
pq.pop();
for(auto neigh: g[cur_node]) {
if(dist[neigh.first] > dist[cur_node] + neigh.second) {
dist[neigh.first] = dist[cur_node] + neigh.second;
pq.push({-dist[neigh.first], neigh.first}); // prima e distanta
}
}
}
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int n, m;
cin >> n >> m;
for(int i = 1; i <= m; ++i) {
int u, v, w;
cin >> u >> v >> w;
g[u].push_back({v, w}); // graf orientat
}
dijkstra(1, n);
for(int i = 2; i <= n; ++i) {
if(dist[i] == INF) {
cout << 0 << ' ';
} else {
cout << dist[i] << ' ';
}
}
return 0;
}