Pagini recente » Cod sursa (job #3286751) | Cod sursa (job #2144449) | Cod sursa (job #1113620) | Cod sursa (job #2833053) | Cod sursa (job #2854200)
#include <fstream>
#include <vector>
#include <queue>
const int MAX_N = 50000;
const int INF = (1 << 30);
int distMin[1 + MAX_N];
bool viz[1 + MAX_N];
std::vector<std::pair<int, int>> children[1 + MAX_N];
std::priority_queue<std::pair<int, int>> q;
void Dijkstra(int n, int start) {
for (int i = 1; i <= n; i++) {
distMin[i] = INF;
}
q.push({0, start});
distMin[start] = 0;
while (!q.empty()) {
int u = q.top().second;
q.pop();
if (viz[u]) {
continue;
}
viz[u] = true;
for (auto it : children[u]) {
int v = it.first;
int cost = it.second;
if (distMin[u] + cost < distMin[v]) {
distMin[v] = distMin[u] + cost;
q.push({-distMin[v], v});
// viz[v] = true;
}
}
}
}
int main() {
std::ifstream fin("dijkstra.in");
std::ofstream fout("dijkstra.out");
int n, m;
fin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v, dist;
fin >> u >> v >> dist;
children[u].push_back({v, dist});
// children[v].push_back({u, dist});
}
Dijkstra(n, 1);
for (int i = 2; i <= n; i++) {
fout << (distMin[i] == INF ? 0 : distMin[i]) << " ";
}
return 0;
}