Cod sursa(job #2632097)

Utilizator PulpysimusJurjiu Tandrau Darius Stefan Pulpysimus Data 2 iulie 2020 11:33:04
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb

#include <bits/stdc++.h>

using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
#define INF 10000000000
bool viz[50001];
long d[50001];
int n,m,p;

typedef pair <long,int > pi;
vector <pi> G[50001];

priority_queue <pi, vector<pi>, greater<pi>> Q;
void init()
{
    int i;
    for(i=1;i<=n;i++)
        d[i]=INF;
        d[1]=0;
}
void read()
{int a,b,c,i;
    f>>n>>m;
   while(f>>a>>b>>c)
   {
       G[a].push_back(make_pair(c,b));

   }
}
void Dijkstra ()
{
   int i,j,vert,dist,v;
while(!Q.empty())
   {
if(viz[Q.top().second]) Q.pop();
else{
       vert=Q.top().second;
       Q.pop();
       viz[vert]=1;

       for(j=0;j<G[vert].size();j++)
       {
           v=G[vert][j].second;
           dist=G[vert][j].first;
           if(dist+d[vert]<d[v] )
           {
               Q.push(make_pair(dist+d[vert],v));
               d[v]=dist+d[vert];
           }
       }

   }

   }
}


int main()
{int i,j;
p=1;
read();
Q.push(make_pair(0,p));



init();
Dijkstra();


for(int i=2;i<=n;i++)
   if(d[i]!=INF) g<<d[i]<<" ";
else g<<0<<" ";
}