Cod sursa(job #2487740)

Utilizator vladcociorvaVlad Cociorva vladcociorva Data 5 noiembrie 2019 18:22:12
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
bool vis[NMAX];
int dist[NMAX];
int n, m;
void djk (int x, vector<vector<pair<int, int>>>& g){
  for (int i = 1; i <= n; ++i)
  {
    dist[i] = 1e9;
  }
  priority_queue<pair<int,int>>pq;
  pq.push({0,x});
  dist[x] = 0;
  while(!pq.empty()){
    int s = pq.top().second;
    pq.pop();
    if (vis[s]) continue;
    vis[s] = 1;
    for (auto e: g[s]) {
      int a = e.first, w = e.second;
      dist[a] = min(dist[a], dist[s] + w);
      pq.push({-dist[a], a});
    }
  }
}
int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  fin >> n >> m;
  vector<vector<pair<int,int>>>g(n+1);
  for (int i = 1; i <= m; ++i)
  {
    int a, b, w;
    fin >> a >> b >> w;
    g[a].push_back({b, w});
  }
  djk(1, g);
  for (int i = 2; i <= n; ++i)
    fout << dist[i] << ' ';
  fout << '\n';
}