Cod sursa(job #2637941)

Utilizator Ionut2791Voicila Ionut Marius Ionut2791 Data 25 iulie 2020 19:49:29
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <iterator>
using namespace std;

const int nMax = 50005;
int n, m;
vector <pair<int,int>> muchii[nMax];
int drum[nMax];


set <pair<int, int>> coada;
void calculare(){

    int vecin, drumLaVecin;

    while(!coada.empty()){

        int nod = coada.begin()->second;
        coada.erase(coada.begin());

        for(unsigned int i = 0; i < muchii[nod].size(); ++i){

            vecin = muchii[nod][i].first;

            drumLaVecin = muchii[nod][i].second + drum[nod];

            drum[vecin] = min(drumLaVecin, drum[vecin]);

            coada.insert(make_pair(0,vecin));
        }

    }
}

int main(){
    //ifstream fin("taxe2.in");
    ifstream fin("dijkstra.in");
    ofstream fout("dijkstra.out");

    fin >> n >> m;

    for(int i = 1; i <= m; ++i){
        int a, b, lg;
        fin >> a >> b >> lg;
        muchii[a].push_back(make_pair(b, lg));
    }

    for(int i = 1; i < nMax; ++i)
        drum[i] = 20001;

    drum[1] = 0;
    coada.insert(make_pair(0,1));

    calculare();

    for(int i = 2; i <= n; ++i){
        if(drum[i] == 20001)
            fout << 0 << " ";
        else
            fout << drum[i] << " ";
    }

    return 0;
}