Pagini recente » Cod sursa (job #1946504) | Cod sursa (job #2184241) | Cod sursa (job #1295683) | Monitorul de evaluare | Cod sursa (job #3351019)
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <functional>
#include <cstdio>
using namespace std;
const long long INF = (1LL << 60);
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M;
cin >> N >> M;
vector<vector<pair<int, int> > > g(N + 1);
for (int i = 0; i < M; i++) {
int A, B, C;
cin >> A >> B >> C;
g[A].push_back(make_pair(B, C));
}
vector<long long> dist(N + 1, INF);
priority_queue<
pair<long long, int>,
vector<pair<long long, int> >,
greater<pair<long long, int> >
> pq;
dist[1] = 0;
pq.push(make_pair(0, 1));
while (!pq.empty()) {
long long d = pq.top().first;
int node = pq.top().second;
pq.pop();
if (d != dist[node]) {
continue;
}
for (size_t i = 0; i < g[node].size(); i++) {
int to = g[node][i].first;
int cost = g[node][i].second;
if (dist[to] > dist[node] + cost) {
dist[to] = dist[node] + cost;
pq.push(make_pair(dist[to], to));
}
}
}
for (int i = 2; i <= N; i++) {
if (dist[i] == INF) {
cout << 0;
}
else {
cout << dist[i];
}
if (i < N) {
cout << ' ';
}
}
cout << '\n';
return 0;
}