Cod sursa(job #2280185)

Utilizator alex_bb8Banilean Alexandru-Ioan alex_bb8 Data 10 noiembrie 2018 12:37:02
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <bits/stdc++.h>

using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

const int INF=1e9,Nmax=5e4+5;

vector <pair <int,int>  >G[Nmax];
int d[Nmax];

void Dijkstra()
{
 priority_queue <pair<int,int>,vector <pair<int,int> > ,greater <pair<int,int> > >pq;
 pq.push({0,1});
 while(!pq.empty())
 {
  int node=pq.top().second;
  int value=pq.top().first;
  pq.pop();

  if(d[node]!=value) continue;
  for(auto x:G[node])
  {
   if(value+x.second<d[x.first])
     d[x.first]=value+x.second;
   pq.push({d[x.first],x.first});
  }
 }
}

int main()
{
    int n,m,x,y,z;
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
     f>>x>>y>>z;
     G[x].push_back({y,z});
    }
    for(int i=2;i<=n;i++) d[i]=INF;
    Dijkstra();
    for(int i=2;i<=n;i++)
     g<<(d[i]!=INF ? d[i] : 0)<<" ";
    return 0;
}