Pagini recente » Cod sursa (job #582675) | Cod sursa (job #1756600) | Cod sursa (job #2805157) | Cod sursa (job #1708276) | Cod sursa (job #2024902)
#include <bits/stdc++.h>
using namespace std;
#define Nmax 666013
#define INF 0x3f3f3f3f
int DP[Nmax];
vector<vector<pair<int, int> > > G;
priority_queue<pair<int,int> > Q;
int N, M;
void read()
{
scanf("%d%d", &N, &M);
G.resize(N + 1);
int a, b, c;
for (int i = 1; i <= N; ++i) {
scanf("%d%d%d", &a, &b, &c);
G[a].emplace_back(c, b);
}
}
void dijkstra(int k)
{
memset(DP,INF,sizeof(DP));
DP[k] = 0;
Q.emplace(-0, k);
while (!Q.empty()) {
auto crt = Q.top();
k = crt.second;
int cost = -crt.first;
Q.pop();
if (DP[k] != cost)
continue;
for (auto it : G[k]) {
if(DP[it.second] > DP[k] + it.first) {
DP[it.second] = DP[k] + it.first;
Q.emplace(-DP[it.second], it.second);
}
}
}
}
void print()
{
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);
print();
return 0;
}