Cod sursa(job #2402922)

Utilizator Chirac_MateiChiriac Matei Chirac_Matei Data 11 aprilie 2019 09:37:55
Problema Algoritmul lui Dijkstra Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <vector>
#include <set>

using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
long long len,x,y,i,n,m;
struct nod
{
    int drum=-1;
    vector <pair <int, long long>> vecini;
} v[50001];
set <pair <long long, int>> drum;
int main()
{
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>len;
        v[x].vecini.push_back(make_pair(y, len));
    }
    drum.insert(make_pair(0,1));
    while(!drum.empty())
    {
        auto it=drum.begin();
        if(v[it->second].drum>it->first || v[it->second].drum==-1)
        {
            v[it->second].drum=it->first;
            for(auto par : v[it->second].vecini)
                drum.insert(make_pair(it->first+par.second, par.first));
        }
        int pozc=it->second;
        drum.erase(it);
        for(auto par : drum)
            if(par.second==pozc)
                drum.erase(par);
    }
    for(i=2;i<=n;i++)
        if(v[i].drum==-1)
            fout<<"0 ";
        else
            fout<<v[i].drum<<' ';
    return 0;
}