Pagini recente » Cod sursa (job #456411) | Cod sursa (job #2275795) | Cod sursa (job #825097) | Cod sursa (job #1624818) | Cod sursa (job #2130967)
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int nMax = 50005;
const int inf = 1e9;
struct Val {
int node, cost;
inline bool operator < (const Val &A) const {
return A.cost < cost;
}
};
priority_queue <Val> Q;
vector <Val> G[nMax];
int dp[nMax];
inline void Dij(int start) {
Val qvals;
qvals.node = start;
qvals.cost = 0;
Q.push(qvals);
dp[start] = 0;
while(!Q.empty()) {
int nod = Q.top().node;
int cst = Q.top().cost;
Q.pop();
for(const auto &v : G[nod]) {
if(dp[v.node] > dp[nod] + v.cost) {
dp[v.node] = dp[nod] + v.cost;
qvals.node = v.node;
qvals.cost = dp[v.node];
Q.push(qvals);
}
}
}
}
int main()
{
int n, m, x, y, c;
f >> n >> m;
Val ins;
for(int i = 1; i <= m; i++) {
f >> x >> y >> c;
ins.node = y;
ins.cost = c;
G[x].push_back(ins);
}
for(int i = 1; i <= n; i++) {
dp[i] = inf;
}
Dij(1);
for(int i = 2; i <= n; i++) {
if(dp[i] == inf) {
g << "0 ";
continue;
}
g << dp[i] << " ";
}
g << "\n";
return 0;
}