Cod sursa(job #3343698)

Utilizator DariusJohnDarius Dumitrescu DariusJohn Data 28 februarie 2026 10:50:07
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
const int inf = 1e9 + 7;

int main() {
  int N, M;
  fin >> N >> M;

  vector<vector<pair<int, int>>> adj(N + 1);
  vector<int> dist(N + 1, inf);
  vector<int> inQueue(N + 1, 0);
  vector<int> countRelax(N + 1, 0);

  for (int i = 0; i < M; i++) {
    int u, v, w;
    fin >> u >> v >> w;
    adj[u].push_back({v, w});
  }

  queue<int> q;

  dist[1] = 0;
  q.push(1);
  inQueue[1] = 1;

  while (!q.empty()) {
    int u = q.front();
    q.pop();
    inQueue[u] = 0;

    for (auto &[v, w] : adj[u]) {
      if (dist[u] + w < dist[v]) {
        dist[v] = dist[u] + w;
        if (!inQueue[v]) {
          q.push(v);
          inQueue[v] = 1;
          countRelax[v]++;
          if (countRelax[v] >= N) {
            fout << "Ciclu negativ!";
            return 0;
          }
        }
      }
    }
  }
  for (int i = 2; i <= N; i++)
    fout << dist[i] << " ";
  return 0;
}