Cod sursa(job #2167061)

Utilizator RazorBestPricop Razvan Marius RazorBest Data 13 martie 2018 20:02:43
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define oo 0x7fffffff
using namespace std;

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

int poz[50001];

struct dist
{
    int d, ind, i;

    dist()
    {
        ind = 0;
    }

    bool operator<(const dist &a) const
    {
        return d > a.d;
    }

    dist operator=(dist a)
    {
        ind = a.ind;
        poz[ind] = i;
        d = a.d;
    }
} d[50001];

int n, m;
vector<pair<int, int> > adj[50001];

void dijkstra()
{
    int N = n, nod = 1;
    d[1].d = 0;
    while (N)
    {
        nod = d[1].ind;
        int dist = d[1].d;
        for (int i = 0 ; i < adj[nod].size(); i++)
        {
            int next = adj[nod][i].first, c = adj[nod][i].second;
            if (dist + c < d[poz[next]].d)
            {
                d[poz[next]].d = dist + c;
                make_heap(d + 1, d + N + 1);
            }
        }
        pop_heap(d + 1, d + N + 1);
        N--;
    }
}

int main()
{
    int x, y, c;

    fin >> n >> m;
    while (m--)
    {
        fin >> x >> y >> c;
        adj[x].push_back(make_pair(y, c));
    }

    for (int i = 1; i <= n; i++)
    {
        poz[i] = i;
        d[i].ind = i;
        d[i].d = oo;
        d[i].i = i;
    }
    dijkstra();

    for (int i = 2; i <= n; i++)
        fout << d[poz[i]].d << ' ';
}