Pagini recente » Cod sursa (job #1448551) | Cod sursa (job #632836) | Cod sursa (job #1729497) | Cod sursa (job #2483727) | Cod sursa (job #1896330)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("dijkstra.in");
ofstream out ("dijkstra.out");
const int NMAX = 50005;
const int INF = 0x3f3f3f3f;
vector <pair <int, int>> G[NMAX];
int nodes, edges, from, to, cost, d[NMAX], crt_node, dist;
int main () {
in >> nodes >> edges;
for (int i = 1; i <= edges; ++ i) {
in >> from >> to >> cost;
G[from].push_back(make_pair(to, cost));
}
(a > 2)? aici e daca da : aici e daca nu
memset (d, INF, sizeof d);
d[1] = 0;
set <pair <int, int>> h;
h.insert(make_pair(1, 0));
while (!h.empty()) {
crt_node = h.begin()->first;
h.erase(h.begin());
for (vector <pair <int, int>>::iterator it = G[crt_node].begin(); it != G[crt_node].end() ; ++ it){
to = it->first;
dist = it->second;
if (d[to] > d[crt_node] + dist){
if (d[to] != INF){
h.erase(h.find(make_pair(to, d[to])));
}
d[to] = d[crt_node] + dist;
h.insert(make_pair(to, d[to]));
}
}
}
for (int i = 2; i <= nodes; ++ i){
if (d[i] == INF) {
d[i] = 0;
}
out << d[i] << " ";
}
return 0;
}