Cod sursa(job #2545311)

Utilizator eduardmirceabraguta eduard eduardmircea Data 12 februarie 2020 23:15:47
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>

using namespace std;
vector< pair<int,int> >g[50005];
priority_queue< pair<int,int>,vector< pair<int,int> >  ,greater< pair<int ,int > >   >q;
short int sel[50005];
int d[50005],n,m,i,j;
ifstream in ("dijkstra.in");
ofstream out ("dijkstra.out");
void djk (int pl)
{

    sel[pl]=1;
    d[pl]=0;
    for(  auto i:g[pl] ){q.push(  {i.second,i.first} );d[i.first]=i.second;}


    while(!q.empty()  )
    {

        while( !q.empty()&& sel[ q.top().first ])q.pop();


if(q.empty () )break;

        int      k =q.top().first;
        int      k1=q.top().second;

sel[k]=1;

            for(auto  i:g[k])
            {

                   if(   d[ i.first ]   >   d[k]+i.second )
                   {
                       d[i.first ]=d[k]+i.second;

                    q.push( { d[i.first],i.first   }  );


                   }
            }

    }

}


int x,y,c;
int main()
{


    in>>m>>n;
    for(i=1; i<=n; i++)
    {
        in>>x>>y>>c;
        g[x].push_back({y,c} );
        g[y].push_back({x,c} );
    }

    for(i=1; i<=m; i++)d[i]=9999999;
djk(1);
for(i=2;i<=m;i++)out<<d[i]<<" ";


    return 0;
}