Pagini recente » Cod sursa (job #2231839) | Cod sursa (job #2215415) | Cod sursa (job #397055) | Cod sursa (job #3175797) | Cod sursa (job #3140335)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
using PII = pair<int, int>;
static constexpr int NMAX = (int)(5e4 + 1);
static const int INF = (int)1e9;
int n;
vector<PII> G[NMAX];
int d[NMAX];
bool Sel[NMAX];
auto cmp = [](PII A, PII B)
{
if (!(A.first < B.first))
return 1;
return 0;
};
priority_queue<PII, vector<PII>, decltype(cmp)> H(cmp);
static inline void Load()
{
f.tie(nullptr);
f >> n;
int m = 0;
f >> m;
for (int e = 1; e <= m; ++e)
{
int x = 0, y = 0, c = 0;
f >> x >> y >> c;
G[x].push_back({c, y});
}
return;
}
int main()
{
Load();
for (int i = 1; i <= n; ++i)
d[i] = INF, Sel[i] = 0;
d[1] = 0, Sel[1] = 1;
for (auto it : G[1])
if (it.first < d[it.second])
d[it.second] = it.first, H.push(it);
while (!H.empty())
{
while (!H.empty() && Sel[H.top().second])
H.pop();
if (H.empty())
break;
int node = H.top().second;
int cost = H.top().first;
Sel[node] = 1, H.pop();
for (auto it : G[node])
if (cost + it.first < d[it.second])
d[it.second] = cost + it.first, H.push({d[it.second], it.second});
}
for (int i = 2; i <= n; ++i)
{
g << (d[i] == INF ? 0 : d[i]);
if (i < n)
g << ' ';
else
g << '\n';
}
return 0;
}