Cod sursa(job #2456727)

Utilizator GabyD002Dobrita Gabriel GabyD002 Data 15 septembrie 2019 13:02:31
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>
#define NM 50005
#define oo (1<<30)
#define pii pair<int,int>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

int n,m,d[NM];
bool viz[NM];

struct ok
{   bool operator()(int x,int y)
        { return d[x]>d[y]; }
};

vector <pii> v[NM];
priority_queue <int,vector<int>,ok> heap;

void Read();
void Dijkstra();

int main()
{   Read();
    Dijkstra();
    return 0;
}

void Read()
{   f>>n>>m;
    for
    (   int x,y,c;
        f>>x>>y>>c;
        v[x].push_back({y,c})
    );
}

void Dijkstra()
{   for(int i=2; i<=n; i++)
        d[i]=oo;
    heap.push(1);
    viz[1]=true;
    while(!heap.empty())
    {   int nod=heap.top();
        heap.pop();
        for(int i=0; i<v[nod].size(); i++)
        {   int nodV=v[nod][i].first;
            int cost=v[nod][i].second;
            if(d[nod]+cost<d[nodV])
            {   d[nodV]=d[nod]+cost;
                if(!viz[nodV])
                {   viz[nodV]=true;
                    heap.push(nodV);
                }
            }
        }
    }
    for(int i=2; i<=n; i++)
        g<<(d[i]==oo ? 0 : d[i])<<' ';
}