Pagini recente » Cod sursa (job #1969331) | Cod sursa (job #2264635) | Cod sursa (job #558524) | Cod sursa (job #3248488) | Cod sursa (job #2307394)
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int N, M;
vector<vector<pair<int, int> > > G;
vector<int> DP;
priority_queue<pair<int,int> > Pq;
void read()
{
scanf("%d%d", &N, &M);
G.resize(N + 1);
DP.resize(N + 1);
for (int i = 1; i <= M; ++i) {
int a,b,c;
scanf("%d%d%d", &a, &b, &c);
G[a].emplace_back(c, b);
}
}
void dijkstra(int k)
{
fill(DP.begin(), DP.end(), INF);
DP[k] = 0;
Pq.push({0, k});
while (!Pq.empty()) {
auto top = Pq.top(); Pq.pop();
int cost = -top.first;
k = top.second;
if (cost != DP[k])
continue;
for (auto it : G[k]) {
int v = it.second;
int edge_cost = it.first;
if (DP[v] > DP[k] + edge_cost) {
DP[v] = DP[k] + edge_cost;
Pq.push({-DP[v], v});
}
}
}
for (int i = 2; i <= N; ++i)
if (DP[i] < INF)
printf("%d ", DP[i]);
else
printf("0 ");
printf("\n");
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
read();
dijkstra(1);
return 0;
}