Pagini recente » Cod sursa (job #807300) | Cod sursa (job #518307) | Cod sursa (job #2657125) | Cod sursa (job #598881) | Cod sursa (job #1980409)
#include <bits/stdc++.h>
#define NMAX 50005
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int inf = (1 << 30);
int N, M, dist[NMAX], inQ[NMAX];
vector < pair < int, int > > G[NMAX];
struct cmp {
bool operator()(const int &a, const int &b) const {
return dist[a] > dist[b];
}
};
priority_queue < int, vector < int >, cmp > Q;
void init() {
for (int i = 1; i <= N; ++i) {
dist[i] = inf;
}
}
void dijkstra(int source) {
dist[source] = 0;
inQ[source] = 1;
Q.push(source);
while (!Q.empty()) {
int node = Q.top(); Q.pop();
inQ[node] = 0;
for (auto it : G[node]) {
if (dist[it.first] > dist[node] + it.second) {
dist[it.first] = dist[node] + it.second;
if (!inQ[it.first]) {
Q.push(it.first);
inQ[it.first] = 1;
}
}
}
}
}
int main() {
f >> N >> M;
for (int i = 1; i <= M; ++i) {
int x, y, z;
f >> x >> y >> z;
G[x].push_back({y, z});
}
init();
dijkstra(1);
for (int i = 2; i <= N; ++i) {
if (dist[i] != inf) {
g << dist[i] << ' ';
} else {
g << 0 << ' ';
}
}
return 0;
}