Pagini recente » Cod sursa (job #1326370) | Cod sursa (job #969362) | Cod sursa (job #2063186) | Cod sursa (job #1995003) | Cod sursa (job #2399502)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
using namespace std;
#define inf 0x3f3f3f3f
typedef pair<int, int> ipair;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector<vector<ipair>> v(50001);
vector<int> dijkstra(int s, int n) {
vector<int> d(n + 1, inf), t(n + 1, 0);
priority_queue<ipair, vector<ipair>, greater<ipair>> Q;
d[s] = 0;
Q.push({0, s});
while(!Q.empty()){
auto nod = Q.top();
Q.pop();
if (d[nod.second] != nod.first)
continue;
for(auto&& vecin : v[nod.second]) {
int cost = vecin.first, next = vecin.second;
if (d[next] > d[nod.second] + cost) {
d[next] = d[nod.second] + cost;
Q.push({d[next], next});
}
}
}
return d;
}
int main() {
int n, m;
int a, b, c;
in >> n >> m;
for (int i = 0; i < m; i++) {
in >> a >> b >> c;
v[a].push_back({c, b});
}
vector<int> sol = dijkstra(1, n);
for (int i = 2; i <= n; i++) {
if (sol[i] == inf) {
out << "0 ";
}
else {
out << sol[i] << " ";
}
}
return 0;
}