Pagini recente » Cod sursa (job #3312814) | Cod sursa (job #1448429) | Cod sursa (job #788388) | Cod sursa (job #1332322) | Cod sursa (job #3335658)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("data.in");
ofstream g("data.out");
constexpr int NMAX = 5e5 + 5;
constexpr long long INF = 1e18;
int n, m;
struct edge {
int to;
long long cost;
bool operator>(const edge& other) const {
return cost > other.cost;
}
};
vector<vector<edge>> a;
vector<long long> d;
vector<int> t;
priority_queue<edge, vector<edge>, greater<>> pq;
void Dijkstra(int s) {
d[s] = 0;
pq.push({s, d[s]});
while (!pq.empty()) {
const auto current = pq.top().to;
pq.pop();
for (const auto [to, cost] : a[current]) {
if (d[current] + cost < d[to]) {
d[to] = d[current] + cost;
t[to] = current;
pq.push({to, d[to]});
}
}
}
for (int i = 2; i <= n; ++i) {
g << d[i] << " ";
}
}
void init(const int size) {
a.resize(size);
d.resize(size, INF);
t.resize(size);
}
int main() {
f >> n >> m;
init(n + 1);
for (int i = 0;i < m; ++i) {
int x, y, c;
f >> x >> y >> c;
a[x].push_back({y, c});
}
Dijkstra(1);
f.close();
g.close();
return 0;
}