Cod sursa(job #1210537)

Utilizator mariusn01Marius Nicoli mariusn01 Data 20 iulie 2014 13:20:37
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <vector>
#include <set>

#define DIM 50010
#define INF DIM*1000

using namespace std;

vector < pair<int, int> > L[DIM];
set < pair<int, int> > s;

int V[DIM], D[DIM], i, x, y, c, n, m, k;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

int main() {
    fin>>n>>m;
    for (i=1;i<=m;i++) {
        fin>>x>>y>>c;
        L[x].push_back( make_pair(y, c) );
    }

    for (i=1;i<=n;i++) {
        D[i] = INF;
    }
    D[1] = 0;

    s.insert(make_pair(0,1));

    while (!s.empty()) {
        k = s.begin()->second;
        s.erase( s.begin() );

        for (i=0;i<L[k].size();i++)
            if (D[ L[k][i].first ] > D[k] + L[k][i].second) {
                s.erase (  make_pair(D[ L[k][i].first ], L[k][i].first) );
                D[ L[k][i].first ] = D[k] + L[k][i].second;
                s.insert (  make_pair(D[ L[k][i].first ], L[k][i].first) );
            }
    }

    for (i=2;i<=n;i++)
        if (D[i] == INF)
            fout<<"0 ";
        else
            fout<<D[i]<<" ";

}