Pagini recente » Cod sursa (job #2272694) | Cod sursa (job #2374589) | Cod sursa (job #2782760) | Cod sursa (job #2355118) | Cod sursa (job #1790424)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
typedef pair<int, int> Muchie;
typedef vector<vector<Muchie>> Graf;
const int kInfinit = (1 << 30);
inline bool Cmp(const Muchie &a, const Muchie &b)
{
return a.second > b.second;
}
vector<int> Dijkstra(const Graf &g, int start)
{
vector<int> distante(g.size(), kInfinit);
distante[start] = 0;
priority_queue<Muchie, vector<Muchie>, decltype(&Cmp)> coada(&Cmp);
coada.push({start, 0});
while (!coada.empty()) {
int nod = coada.top().first;
int cost = coada.top().second;
coada.pop();
if (distante[nod] != cost) continue;
for (auto &m : g[nod]) {
int cost_final = cost + m.second;
if (cost_final < distante[m.first]) {
distante[m.first] = cost_final;
coada.push({m.first, cost_final});
}
}
}
for (int &dist : distante)
if (dist == kInfinit)
dist = 0;
return distante;
}
int main()
{
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n, m;
fin >> n >> m;
Graf graf(n + 1);
while (m--) {
int x, y, c;
fin >> x >> y >> c;
graf[x].push_back({y, c});
}
auto distante = Dijkstra(graf, 1);
for (int i = 2; i <= n; ++i)
fout << distante[i] << " ";
return 0;
}