Pagini recente » Cod sursa (job #3354825) | Cod sursa (job #2020137) | Cod sursa (job #2916682) | Cod sursa (job #2473971) | Cod sursa (job #3308786)
#include <bits/stdc++.h>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector<int> dijkstra(vector<vector<pair<int, int>>>& grf, int src = 0) {
int n = grf.size();
const int max_ssol = 1e9 + 5;
vector<int> ssol(n, max_ssol);
priority_queue<pair<int, int>> proq;
proq.push({0, src});
ssol[src] = 0;
while (!proq.empty()) {
int node = proq.top().second;
int cost = -proq.top().first;
proq.pop();
if (cost != ssol[node])
continue;
for (int i = 0; i < grf[node].size(); i++)
{
int next = grf[node][i].first;
int c = grf[node][i].second;
if (cost + c < ssol[next]) {
ssol[next] = cost + c;
proq.push({-ssol[next], next});
}
}
}
for (int i = 0; i < n; i++)
{
if (ssol[i] == max_ssol)
ssol[i] = 0;
}
return ssol;
}
int main() {
int n, m;
in >> n >> m;
vector<vector<pair<int, int>>> grf(n);
for (int i = 0; i < m; i++) {
int a, b, c;
in >> a >> b >> c;
a--; b--;
grf[a].push_back({b, c});
}
vector<int> ssol = dijkstra(grf);
for (int i = 1; i < n; i++) {
out << ssol[i] << " ";
}
out << "\n";
}