Pagini recente » Cod sursa (job #1671816) | Cod sursa (job #3291219) | Cod sursa (job #225262) | Cod sursa (job #3287296) | Cod sursa (job #1789203)
#include <stdio.h>
#include <vector>
#include <set>
#include <queue>
#define maxdim 50005
using namespace std;
int n, m;
int dist[maxdim];
vector<pair<int, int>> G[maxdim];
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> S;
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; ++i) {
int x, y, c; scanf("%d %d %d", &x, &y, &c);
G[x].push_back(make_pair(y, c));
}
for (int i = 2; i <= n; ++i) {
dist[i] = 1 << 30;
}
S.push(make_pair(dist[1], 1));
while (!S.empty()) {
auto p = S.top();
int nod = p.second, cost = p.first;
S.pop();
if (cost != dist[nod]) {
continue;
}
for (auto &v : G[nod]) {
if (dist[v.first] > dist[nod] + v.second) {
dist[v.first] = dist[nod] + v.second;
S.push(make_pair(dist[v.first], v.first));
}
}
}
for (int i = 2; i <= n; ++i) {
if (dist[i] == (1 << 30)) {
dist[i] = 0;
}
printf("%d ", dist[i]);
}
printf("\n");
return 0;
}