Cod sursa(job #1457366)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 3 iulie 2015 11:57:38
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <vector>
#include <set>
#define NMAX 50001
#define inf 2000000000

using namespace std;

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

int n, m, dist[NMAX];
vector < pair < int, int > > v[NMAX];
set < pair < int, int> > heap;

void read()
{
    f >> n >> m;

    int a, b, c;

    for (int i=1; i<=m; ++i)
    {
        f >> a >> b >> c;
        v[a].push_back(make_pair(b,c));
    }
}

void initialize()
{
    for (int i=2; i<=n; ++i)
        dist[i] = inf;
    dist[1] = 0;
}

void dijkstra()
{
    initialize();
    heap.insert(make_pair(1,0));

    while (heap.size())
    {
        int minim = heap.begin() -> first;
        heap.erase(heap.begin());

        for (vector < pair < int, int> > :: iterator it = v[minim].begin(); it != v[minim].end(); ++it)
            if (dist[it -> first] > dist[minim] + it -> second)
            {
                dist[it -> first] = dist[minim] + it -> second;
                heap.insert(make_pair(it -> first, dist[it -> first]));
            }
    }
}

int main()
{
    read();
    dijkstra();

    for (int i=2; i<=n; ++i)
        if (dist[i] == inf)
        g << "0 ";
    else
        g << dist[i] << " ";
    return 0;
}