Cod sursa(job #2194735)

Utilizator herbertoHerbert Mohanu herberto Data 14 aprilie 2018 11:48:30
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<bits/stdc++.h>
using namespace std;
#define MAXN 50001
const int INF = 0x3f3f3f3f;
int d[MAXN];
set< pair <int, int> >s;
vector <pair <int, int> >g[MAXN];

void dij(int x){
  int y, cost, c, i;
  s.insert({0, x});
  d[x]=0;
  while(!s.empty()){
    x=(*s.begin()).second;
    cost=(*s.begin()).first;
    if(cost<=d[x]){
      s.erase(s.begin());
      for(i=0; i<g[x].size(); i++){
        y=g[x][i].second;
        c=g[x][i].first;
        if(d[x]+c<d[y]){
          d[y]=d[x]+c;
          s.insert({d[y], y});
        }
      }
    }
  }
}


int main(){
  FILE*fin=fopen("dijkstra.in", "r");
  FILE*fout=fopen("dijkstra.out", "w");
  int n, m, i, a, b, c;
  fscanf(fin, "%d%d", &n, &m);
  for(i=1; i<=m; i++){
    fscanf(fin, "%d%d%d", &a, &b, &c);
    g[a].push_back({c, b});
  }
  for(i=1; i<=n; i++)
    d[i]=INF;
  dij(1);
  for(i=2; i<=n; i++){
    if(d[i]==INF)
      fprintf(fout, "0 ");
    else
      fprintf(fout, "%d ", d[i]);
  }
  return 0;
}