Cod sursa(job #2206405)

Utilizator Radu_FilipescuFilipescu Radu Radu_Filipescu Data 22 mai 2018 17:04:13
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <queue>
#include <vector>
#define INF 200000000

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

int N,M;

struct Nod
{
  vector <int> Ad;
  vector <int> Cost;
} G[50002];

int dist[50002];

void Read()
{
  fin>>N>>M;

  int a,b,d;

  for(int i=1; i<=M; ++i)
   {
     fin>>a>>b>>d;

     G[a].Ad.push_back(b);
     G[a].Cost.push_back(d);
   }

  fin.close();
}

struct comp
{
  bool operator()(const int &X,const int &Y)
  {
    return dist[X]>dist[Y];
  }
};

void Dijkstra()
{
  priority_queue <int,vector<int>,comp> Heap;

  dist[1]=0;
  for(int i=2; i<=N; ++i)
    dist[i]=INF;

  for(int i=1; i<=N; ++i)
    Heap.push(i);

  int curent;

  while(!Heap.empty())
  {
     curent=Heap.top(); Heap.pop();

     for(int i=0; i<G[curent].Ad.size(); ++i)
       dist[G[curent].Ad[i]]=min(dist[G[curent].Ad[i]],dist[curent]+G[curent].Cost[i]);
  }
}

void Print()
{
  for(int i=2; i<=N; ++i)
    if(dist[i]<INF) fout<<dist[i]<<' ';
    else fout<<'0'<<' ';

  fout.close();
}

int main()
{
    Read();
    Dijkstra();
    Print();

    return 0;
}