Cod sursa(job #2714461)

Utilizator PulpysimusJurjiu Tandrau Darius Stefan Pulpysimus Data 1 martie 2021 20:18:46
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
#define INF 10000000000
typedef pair <long, int> p;
int n,m,start;
long dist[50005];
bool viz[50005];
priority_queue  <p, vector<p>, greater<p> > Q;
vector <p> G[50005];
void read()
{int a,b,c,i;
f>>n>>start;

    while(f>>a>>b>>c)
    G[a].push_back({c,b});
}

void init()
{
    for(int i=1;i<=n;i++)
        dist[i]=INF;
        dist[start]=0;
}
void Dijkstra()
{
    int vert,cost;
    Q.push(make_pair(0,start));
    while(!Q.empty())
    {
vert=Q.top().second;

if(viz[vert]==0)
{
    viz[vert]=1;
    Q.pop();
    for(auto x:G[vert])
    {
        if(dist[vert]+x.first<dist[x.second])
        {
            Q.push({dist[vert]+x.first,x.second});
            dist[x.second]=dist[vert]+x.first;
        }
    }
} else Q.pop();

    }
}
int main()
{
    read();
start=1;
    init();
    Dijkstra();
    int i;

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