Pagini recente » Cod sursa (job #1446248) | Cod sursa (job #1003950) | Cod sursa (job #2633421) | Cod sursa (job #491466) | Cod sursa (job #2291683)
#include <fstream>
#include <queue>
#include <tuple>
#include <functional>
#include <vector>
constexpr auto inf = (1 << 28);
int main()
{
std::ifstream cin("dijkstra.in");
std::ofstream cout("dijkstra.out");
auto n = 0;
auto m = 0;
cin >> n >> m;
std::vector<std::vector<std::tuple<int, int>>> g(n + 1);
for (auto i = 1; i <= m; i++)
{
auto u = 0;
auto v = 0;
auto c = 0;
cin >> u >> v >> c;
g[u].emplace_back(v, c);
}
std::vector<int> d(n + 1, inf);
std::priority_queue<std::tuple<int, int>, std::vector<std::tuple<int, int>>, std::greater<std::tuple<int, int>>> q;
q.emplace(0, 1);
d[1] = 0;
while (!q.empty())
{
const auto cu = q.top();
q.pop();
const auto c = std::get<0>(cu);
const auto u = std::get<1>(cu);
if (c > d[u])
{
continue;
}
for (const auto& vc : g[u])
{
const auto v = std::get<0>(vc);
const auto cost = std::get<1>(vc);
if (d[v] > d[u] + cost)
{
d[v] = d[u] + cost;
q.emplace(d[v], v);
}
}
}
for (auto i = 2; i <= n; i++)
cout << d[i] << ' ';
return 0;
}