Cod sursa(job #2449501)

Utilizator ejoi2019Ejoi 2019 ejoi2019 Data 19 august 2019 22:44:51
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <vector>
#include <deque>

using namespace std;


const int N = 50001;
int n, m;
int M[N];
vector <pair <int, int>> g[N];
int d[N];

int main() {
  freopen ("dijkstra.in", "r", stdin);
  freopen ("dijkstra.out", "w", stdout);

  scanf("%d %d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    g[a].push_back({b, c});
  }
  for (int i = 2; i <= n; i++) {
    d[i] = (1 << 29);
    M[i] = 1;
  }

  deque <int> q;
  q.push_back(1);

  while (!q.empty()) {
    int nod = q.front();
    q.pop_front();
    for (auto &it : g[nod]) {
      int nou = it.first;
      int co = it.second + d[nod];
      if (co < d[nou]) {
        d[nou] = co;
        if (M[nou] == 1)
          q.push_back(nou);
        if (M[nou] == 3)
          q.push_front(nou);
        M[nou] = 2;
      }
    }
  }

  for (int i = 2; i <= n; i++) {
    if (d[i] == (1 << 29))
      d[i] = 0;
    printf("%d ", d[i]);
  }
  printf("\n");

  return 0;
}