Cod sursa(job #2901912)

Utilizator StasBrega Stanislav Stas Data 14 mai 2022 19:42:43
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <bits/stdc++.h>
 
using namespace std;
 
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
 
const int NMax=50005;
const int oo = (1 << 30);
 
vector <pair <int,int> >a[NMax];
 
int N,M,dist[NMax];
bool in[NMax];
 
struct comp
{
    bool operator()(int x, int y)
    {
        return dist[x]>dist[y];
    }
};
 
priority_queue <int, vector<int>, comp> coada;
 
void citire()
{
    fin >> N >> M;
    for(int i=1;i<=M;i++)
    {
        int x,y,d;
        fin >> x >> y >> d;
        a[x].push_back(make_pair(y,d));
    }
    for(int i=1;i<=N;i++)
        dist[i]=oo;
    dist[1]=0;
    coada.push(1);
    in[1]=true;
}
void dijkstra()
{
    int nod,vecin,lung;
    while(!coada.empty())
    {
        nod=coada.top();
        coada.pop();
        in[nod]=false;
        for(int i=0;i<a[nod].size();i++)
        {
            vecin=a[nod][i].first;
            lung=a[nod][i].second;
            if(in[vecin]==false || dist[nod]+lung<dist[vecin])
            {
                dist[vecin]=dist[nod]+lung;
                coada.push(vecin);
                in[vecin]=true;
            }
        }
    }
}
void afiseaza()
{
    for(int i=2;i<=N;i++)
        if(dist[i]==oo)
            fout << "0 ";
        else
            fout << dist[i] << " ";
}
int main()
{
 
    citire();
    dijkstra();
    afiseaza();
 
    return 0;
 
}