Cod sursa(job #2814087)

Utilizator DianaZaharia132nr2Zaharia Diana Cristiana DianaZaharia132nr2 Data 7 decembrie 2021 16:24:49
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include    <iostream>
#include    <fstream>
#include    <queue>
#include    <vector>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int NMax = 50005;
const int oo = (1 << 30);
int N, M;
int drum[NMax];
bool ok[NMax];
vector < pair <int,int> > v[NMax];
struct prioritate
{
    bool operator()(int a,int b)
    {
        return drum[a]>drum[b];
    }
};
priority_queue<int, vector<int>,prioritate>q;

void read()
{
    f>>N>>M;
    for(int i=1;i<=M;++i)
    {
        int a, b, c;
        f>>a>>b>>c;
        v[a].push_back(make_pair(b,c));
    }
}
void dj(int start)
{
    for(int i=1;i<=N;++i)
        drum[i]=oo;

    drum[start]=0;
    q.push(start);
    ok[start] = true;
    while(!q.empty())
    {
        int nc=q.top();
        q.pop();
        ok[nc]=false;
        for(int i=0;i<v[nc].size();++i)
        {
            int nod = v[nc][i].first;
            int lungime = v[nc][i].second;
            if(drum[nc]+lungime<drum[nod])
            {
                drum[nod]=drum[nc]+lungime;
                if(ok[nod]==false)
                {
                    q.push(nod);
                    ok[nod]=true;
                }
            }
        }
    }
}
void write()
{
    for(int i=2;i<=N;++i)
    {
        if(drum[i]!=oo)
            g<<drum[i]<<" ";
        else
            g<<"0 ";
    }
}
int main()
{
    read();
    dj(1);
    write();
}