Pagini recente » Cod sursa (job #118004) | Cod sursa (job #1984078) | Cod sursa (job #1366018) | Cod sursa (job #1739832) | Cod sursa (job #1882348)
#include<bits/stdc++.h>
using namespace std;
ifstream f ("dijkstra.in");
ofstream g ("dijkstra.out");
int const maxsize = 50010;
int const INF = 2000000000;
int n, m;
int x, y, d;
int viz[maxsize];
int dist[maxsize];
vector<pair<int, int>> v[maxsize];
auto cmp = [](pair<int, int> a, pair<int, int> b) -> bool {
return a.first > b.first;
};
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> q(cmp);
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; i++) {
scanf("%d %d %d", &x, &y, &d);
v[x].push_back({y, d});
}
q.push({0, 1});
for (int i = 2; i <= n; i++)
dist[i] = INF;
while (!q.empty()) {
int node = q.top().second;
viz[node]++;
q.pop();
for (int i = 0; i < v[node].size(); i++) {
int nei = v[node][i].first;
int edgeW = v[node][i].second;
if(edgeW + dist[node] < dist[nei] && viz[nei] == 0) {
dist[nei] = edgeW + dist[node];
q.push({dist[nei], nei});
}
}
}
for (int i = 2; i <= n; i++) {
if(dist[i] == INF)
printf("0 ");
else
printf("%d ", &dist[i]);
}
}