Cod sursa(job #2708739)

Utilizator codruta.miron08Miron Ioana Codruta codruta.miron08 Data 19 februarie 2021 11:52:33
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#define maxxi 0x3f3f3f3f
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m,x,y,l,d[50005];
bool viz[50005];
vector <pair<int,int>> graph[50005];
struct comp
{
    bool operator()(int x, int y)
    {
        return d[x] > d[y];
    }
};
priority_queue<int , vector <int > , comp> q;
void citire()
{
    fin >> n >> m;
    for(int i = 0; i < m; i++)
    {
        fin >> x >> y >> l;
        graph[x].push_back(make_pair(y,l));
    }
}
void dijkstra(int st)
{
    for(int i = 1; i <= n ; i++)
        d[i]  = maxxi;
    d[st] = 0;
    viz[st] = true;
    q.push(st);
    while(!q.empty())
    {
       int nod_curent = q.top();
       q.pop();
       viz[nod_curent] = false;
       for(auto &v : graph[nod_curent])
       {
           int vecin = v.first;
           int lg = v.second;
           if(d[nod_curent] + lg < d[vecin])
           {
               d[vecin] = d[nod_curent] + lg;
               if(viz[vecin] == false)
               {
                     q.push(vecin);
               viz[vecin] = true;
               }

           }
       }
    }
}
int main()
{
    citire();
    dijkstra(1);
    for(int i = 2; i <= n; i++)
        if(d[i] != maxxi)
        fout << d[i] <<" " ;
    else
        fout << "0 ";
    return 0;
}