Pagini recente » Cod sursa (job #2229961) | Cod sursa (job #2102133) | Cod sursa (job #2475722) | Cod sursa (job #1086325) | Cod sursa (job #2268103)
#include <fstream>
#include <iostream>
#include <climits>
#include <vector>
#include <set>
using namespace std;
#define PI pair<int, int>
ifstream in ( "dijkstra.in" );
ofstream out ( "dijkstra.out" );
int n;
vector<PI> graf[50005];
vector<int> d(50005, INT_MAX);
void citeste() {
int m;
in >> n >> m;
while (m--) {
int i, j, c;
in >> i >> j >> c;
graf[i].push_back({ c, j });
}
}
void Dijkstra() {
set<PI> p;
p.insert({ 0, 1 });
d[1] = 0;
while (!p.empty()) {
int current = p.begin()->second;
p.erase(p.begin());
for (auto& i : graf[current]) {
int nod = i.second, cost = i.first;
if (d[nod] > d[current] + cost) {
if (d[nod] != INT_MAX)
p.erase({ d[nod], nod });
d[nod] = d[current] + cost;
p.insert({ d[nod], nod });
}
}
}
}
void afiseaza() {
for (int i { 2 }; i <= n; ++i)
out << (d[i] == INT_MAX ? 0 : d[i]) << ' ';
}
int main() {
citeste();
Dijkstra();
afiseaza();
}