Pagini recente » Cod sursa (job #1099836) | Cod sursa (job #1712691) | Istoria paginii runda/winners27/clasament | Cod sursa (job #1281793) | Cod sursa (job #2802867)
#include <fstream>
#include <vector>
#include <queue>
#include <limits.h>
using namespace std;
typedef pair<int, int> ii;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
void dijkstra(vector<vector<pair<int, int>>>& ad, int n, int s) {
vector<int> dist(n + 1, INT_MAX);
vector<bool>viz(n + 1, false);
priority_queue<ii, vector<ii>, greater<ii>> vec;
dist[1] = 0;
vec.push({ 0, 1 });
while (!vec.empty()) {
int nod = vec.top().second;
vec.pop();
if (!viz[nod]) {
viz[nod] = true;
for (auto v : ad[nod]) {
if (dist[nod] + v.second < dist[v.first]) {
dist[v.first] = dist[nod] + v.second;
vec.push({ dist[v.first], v.first });
}
}
}
}
for (int i = 2; i <= n; ++i) {
if (dist[i] != INT_MAX) {
out << dist[i] << ' ';
}
else {
out << "0 ";
}
}
}
int main() {
int n, m, x, y, cost;
in >> n >> m;
vector<vector<ii>> ad(n + 1);
for (int i = 1; i <= m; ++i) {
in >> x >> y >> cost;
ad[x].push_back({ y, cost });
}
dijkstra(ad, n, 1);
return 0;
}