Cod sursa(job #2457382)

Utilizator ViAlexVisan Alexandru ViAlex Data 17 septembrie 2019 16:55:27
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include<fstream>
#include<vector>
#include<set>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");

int dist[50010];
int n,m;

vector<std::pair<int,int>> drumuri [50010];

void read()
{
    int a,b,c;
    in>>n>>m;
    for(int i=0; i<n; i++)
        dist[i]=-1;

    for(int i=0; i<m; i++)
    {
        in>>a>>b>>c;
        drumuri[a-1].push_back(std::pair<int,int>(b-1,c));
    }

}


void dijkstra()
{
    set<std::pair<int,int>> valori;
    valori.insert(std::pair<int,int>(0,0));

    while(valori.size())
    {
        std::pair<int,int>nod=*valori.begin();
        valori.erase(valori.begin());

        int index=nod.second;
        int val=nod.first;
        for(unsigned i=0; i<drumuri[index].size(); i++)
        {
            int nv=val+drumuri[index][i].second;
            int nindex=drumuri[index][i].first;
            if(nv< dist[nindex] || dist[nindex]==-1)
            {
                dist[nindex]=nv;
                valori.insert(std::pair<int,int>(nv,nindex));
            }
        }

    }

}

void prt()
{
    for(int i=1; i<n; i++)
        out<<max(dist[i],0)<<" ";


}

int main()
{
    read();
    dijkstra();
    //prt();
    return 0;
}