Cod sursa(job #1896330)

Utilizator LazarAndreiLazar Andrei Teodor LazarAndrei Data 28 februarie 2017 17:02:17
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#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;
}