Pagini recente » Cod sursa (job #1939964) | Cod sursa (job #1112067) | Cod sursa (job #1174539) | Cod sursa (job #505930) | Cod sursa (job #2683679)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 5e4 + 5;
const int INF = 2e9;
int d[NMAX];
vector <pair <int, int>> v[NMAX];
bool selectat[NMAX];
int n;
void dijkstra(int x0) {
priority_queue <pair<int, int>> h;
for (int i = 1; i <= n; i++)
d[i] = INF;
x0 = 1;
d[x0] = 0;
h.push({0, x0});
while (!h.empty()) {
while (!h.empty() && selectat[h.top().second])
h.pop();
if (h.empty())
break;
int x = h.top().second;
selectat[x] = true;
h.pop();
for (auto m : v[x]) {
int y = m.second;
int c = m.first;
if (d[x] + c < d[y]) {
d[y] = d[x] + c;
h.push({-d[y], y});
}
}
}
}
int main() {
freopen ("dijkstra.in", "r", stdin);
freopen ("dijkstra.out", "w", stdout);
int m;
cin >> n >> m;
int a, b, c;
for (int i = 1; i <= m; i++) {
scanf ("%d%d%d", &a, &b, &c);
v[a].push_back({c, b});
}
dijkstra(1);
for (int x = 2; x <= n; x++)
cout << d[x] << " ";
return 0;
}