Mai intai trebuie sa te autentifici.

Cod sursa(job #1857349)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 26 ianuarie 2017 08:37:10
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <utility>
#include <set>
#define PR pair<int, int>
#define mp make_pair

using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

const int f_mare = 1e9;
int n, m, i, j, x, y, c, l, t;
set <PR> cd;
vector <PR> ls[50005];
int dist[50005];

int main() {
    f >> n >> m;
    for (i = 2; i <= n; i++)
        dist[i] = f_mare;
    while (m--) {
        f >> x >> y >> c;
        ls[x].push_back(mp(c,y));
    }
    l = ls[1].size();
    cd.insert(mp(0,1));
    while (cd.empty() == 0) {
        t = cd.begin() -> first;
        x = cd.begin() -> second;
        cd.erase(cd.begin());
        l = ls[x].size();
        for (i = 0; i < l; i++) {
            y = ls[x][i].second;
            c = ls[x][i].first;
            if (dist[x]+c < dist[y]) {
                if (dist[y] != f_mare)
                    cd.erase(cd.find(mp(dist[y], y)));
                dist[y] = dist[x]+c;
                cd.insert(mp(dist[y],y));
            }
        }
    }
    for (i = 2; i <= n; i++)
        g << (dist[i]==f_mare?0:dist[i]) << ' ';
    return 0;
}