Pagini recente » Cod sursa (job #969007) | Cod sursa (job #2688250) | Cod sursa (job #2703157) | Cod sursa (job #2560679) | Cod sursa (job #2461770)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define pb push_back
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct Elem {
int node, cost;
};
class Comparator {
public:
bool operator() (const Elem &a, const Elem &b) {
if (a.cost != b.cost)
return a.cost > b.cost;
return a.node > b.node;
}
};
const int MAXN = 5 * 1e4 + 10, INF = 0x3f3f3f3f;
int distances[MAXN], n, m;
vector<Elem> edges[MAXN];
priority_queue<Elem, vector<Elem>, Comparator> heap;
void read() {
int x, y, cost;
fin >> n >> m;
for (int i = 0; i < m; ++i) {
fin >> x >> y >> cost;
edges[x].pb({y, cost});
}
}
void initialize() {
for (int i = 1; i <= n; ++i)
distances[i] = INF;
}
void solve() {
heap.push({1, 0});
distances[1] = 0;
while (!heap.empty()) {
Elem el = heap.top();
heap.pop();
for (auto &it: edges[el.node]) {
if (distances[el.node] + it.cost < distances[it.node]) {
distances[it.node] = distances[el.node] + it.cost;
heap.push({it.node, distances[it.node]});
}
}
}
}
void print() {
for (int i = 2; i <= n; ++i)
fout << distances[i] << ' ';
}
int main() {
read();
initialize();
solve();
print();
return 0;
}