Cod sursa(job #2166731)

Utilizator caprariuapCaprariu Alin-Paul caprariuap Data 13 martie 2018 18:39:07
Problema Algoritmul lui Dijkstra Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>

using namespace std;

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

int n,m,i,costminim[50010];
vector <int> v[50010],cost[50010];

class cmp
{
public:
    bool operator()(int a, int b)
    {

        return costminim[a]<costminim[b];
    }
};

set <int,cmp> s;

int main()
{
    fin >> n >> m;
    for (i=1; i<=m; i++)
    {
        int a,b,c;
        fin >> a >> b >> c;
        v[a].push_back(b);
        cost[a].push_back(c);
    }
    for (i=2; i<=n; i++)
        costminim[i]=1000000000;
    s.insert(1);
    while (!s.empty())
    {
        int x=*s.begin();
        s.erase(x);
        for (i=0; i<v[x].size(); i++)
            if (costminim[x]+cost[x][i]<costminim[v[x][i]])
            {
                s.erase(v[x][i]);
                costminim[v[x][i]]=costminim[x]+cost[x][i];
                s.insert(v[x][i]);
            }
    }
    for (i=2; i<=n; i++)
        if (costminim[i]==1000000000)
            fout << "0 ";
        else
            fout << costminim[i] << ' ';
    fout << '\n';
}