Pagini recente » Cod sursa (job #2352470) | Cod sursa (job #80914) | Cod sursa (job #123775) | Cod sursa (job #3145220) | Cod sursa (job #2766666)
#include <fstream>
#include <vector>
#include <set>
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
#define DIM 50001
#define INF (1 << 28)
vector <pair<int, int>> v[DIM];
int n, m, x, y, c, dist[DIM];
static inline void Dijkstra(int k) {
for(int i = 1; i <= n; i++)
dist[i] = INF;
dist[k] = 0; ///distanta pana la el e 0;
set<pair<int, int>> d; ///retin costul si nodul pentru a fi sortate crescator dupa cost;
d.insert({0, k}); ///distanta si nodul;
while(!d.empty()) {
int node = d.begin()->second;
d.erase(d.begin());
for(auto e : v[node]) { ///unde pot merge din nodul actual;
int nod = e.first;
int cost = e.second;
if(dist[nod] > cost + dist[node]) { ///daca am un drum mai bun;
if(dist[nod] != INF)
d.erase(d.find({dist[nod], nod}));
dist[nod] = cost + dist[node]; ///retin costul minim
d.insert({dist[nod], nod}); ///il adaug in set;
}
}
}
}
int main() {
cin >> n >> m;
for(int i = 1; i <= m; i++) {
cin >> x >> y >> c;
v[x].push_back({y, c}); ///destinatie si cost;
}
Dijkstra(1);
for(int i = 2; i <= n; i++)
cout << (dist[i] == INF ? 0 : dist[i]) << " ";
return 0;
}