Cod sursa(job #3207563)

Utilizator vlad_dimuVlad Dimulescu vlad_dimu Data 26 februarie 2024 14:04:46
Problema Algoritmul lui Dijkstra Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
#define INF 1 << 30
#define MAXN 50000
using namespace std;

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

struct nod{
  int v, c;
};

vector <nod> graph[MAXN + 1];
int d[MAXN + 1];

class Compare {
public:
    bool operator()(nod a, nod b){
      return a.c < b.c;
    }
};

priority_queue <nod, vector<nod>, Compare> pq;

void dijkstra( int s ){
  d[s] = 0;
  pq.push( {s, 0} );

  while( !pq.empty() ){
    int u = pq.top().v;
    pq.pop();
    for( int i = 0; i < graph[u].size(); i++ ){
      int vecin, cost;
      vecin = graph[u][i].v, cost = graph[u][i].c;
      if( d[vecin] > d[u] + cost ){
        d[vecin] = d[u] + cost;
        pq.push( {vecin, d[vecin]} );
      }
    }
  }
}

int main(){
  int N, M, i;
  fin >> N >> M;
  for( i = 0; i < M; i++ ){
    int x, y, cost;
    fin >> x >> y >> cost;
    graph[x].push_back( { y, cost } );
  }
  for( i = 1; i <= N; i++ )
    d[i] = INF;

  dijkstra(1);
  for( i = 2; i <= N; i++ ){
    if( d[i] == INF )
      fout << 0 << ' ';
    else
      fout << d[i] << ' ';
  }

}