Cod sursa(job #2771437)

Utilizator Iustin01Isciuc Iustin - Constantin Iustin01 Data 27 august 2021 12:28:44
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
using namespace std;

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

int n, m;

void Dijkstra (int node, vector < vector < pair < int , int > > > &g, vector < int > &dist){
  priority_queue < pair < int , int > , vector < pair < int , int > > , greater < pair < int , int > > > q;
  vector < bool > visited(n, false);
  q.push({0, node});
  dist[node] = 0;
  visited[node] = true;
  while(!q.empty()){
    node = q.top().second;
    q.pop();
    visited[node] = false;
    for(int i = 0; i < g[node].size(); i++){
      int v = g[node][i].first;
      int weight = g[node][i].second;
      if(dist[v] > dist[node] + weight){
        dist[v] = dist[node] + weight;
        if(visited[v]){
          continue;
        }
        visited[v] = true;
        q.push({dist[v], v});
      }
    }
  }
}

int main(){
  in>>n>>m;
  vector < vector < pair < int , int > > > g(n + 1);
  vector < int > dist(n + 1, INT_MAX);
  while (m--) {
    int x, y, cost;
    in>>x>>y>>cost;
    g[x].push_back({y, cost});
  }

  Dijkstra(1, g, dist);

  for(int i = 2; i <= n; i++)
    out<<(dist[i] == INT_MAX ? 0 : dist[i])<<" ";
}