Cod sursa(job #2398753)

Utilizator StasBrega Stanislav Stas Data 6 aprilie 2019 00:22:03
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("sate.in");
ofstream fout("sate.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(dist[nod]+lung<dist[vecin])
            {
                dist[vecin]=dist[nod]+lung;
                if(in[vecin]==false)
                {
                    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;

}