Cod sursa(job #2325316)

Utilizator radugnnGone Radu Mihnea radugnn Data 22 ianuarie 2019 14:42:37
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <set>
#include <vector>
#define INF 1000000000
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
set < pair<int,int> > s;
vector < pair <int,int> > L[100000];
int n,m,i,a,b,c,D[100000];
int main()
{
    fin>>n>>m;
    for(i=1;i<=m;i++){
        fin>>a>>b>>c;
        L[a].push_back( make_pair(b,c));
    }
    for(i=2;i<=n;i++)
        D[i]=INF;
    s.insert(make_pair(0,1));

    while(s.size()!=0){
        ///cel mai mic
        m=s.begin()->second;
        s.erase(s.begin());
        ///vecinii
        for(i=0;i<L[m].size();i++){
            if(D[L[m][i].first] > D[m]+L[m][i].second){
                s.erase(make_pair(D[L[m][i].first], L[m][i].first));
                D[L[m][i].first] = D[m]+L[m][i].second;
                s.insert(make_pair(D[L[m][i].first], L[m][i].first));
            }
        }

    }
    for(i=2;i<=n;i++)
            if(D[i]==INF)
                fout<<"0 ";
            else
                fout<<D[i]<<" ";
    return 0;
}