Pagini recente » Cod sursa (job #600573) | Cod sursa (job #2951106) | Cod sursa (job #2905277) | Cod sursa (job #2539474) | Cod sursa (job #2593023)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int INF = 1000000000;
const int N = 50001;
const int M = 250001;
int n, m, p, x, y, nr, c, pred[N], d[N], lst[N];
int vf[2 * M], cost[2 * M], urm[2 * M];
void adauga(int x, int y, int c) {
vf[++nr] = y;
cost[nr] = c;
urm[nr] = lst[x];
lst[x] = nr;
}
priority_queue <pair <int, int> > h;
void dijkstra(int x0) {
pair <int, int> p;
for (int i = 1; i <= n; i++) {
if (i == x0) d[i] = 0;
else d[i] = INF;
}
h.push(make_pair(0, x0));
while (!h.empty()) {
p = h.top();
h.pop();
int x = p.second;
int c = -p.first;
if (d[x] != c) continue;
for (int p = lst[x]; p != 0; p = urm[p]) {
int y = vf[p];
if (c + cost[p] < d[y]) {
d[y] = c + cost[p];
h.push(make_pair(-d[y], y));
}
}
}
}
int main() {
fin >> n >> m;
for (int i = 1; i <= m; i++) {
fin >> x >> y >> c;
adauga(x, y, c);
}
dijkstra(1);
for (int i = 2; i <= n; i++) {
if (d[i] != INF) fout << d[i] << ' ';
else fout << 0 << ' ';
}
fin.close();
fout.close();
return 0;
}