Cod sursa(job #3336045)

Utilizator AlexN_04Nedelcu Alex AlexN_04 Data 24 ianuarie 2026 01:57:30
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>

#define INF 1e9

using namespace std;

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

struct Muchie {
    int u, v, cost;

    Muchie() {}
    Muchie(int x, int y, int w) : u(x), v(y), cost(w) {}
};

vector<int> d, tata;

bool bellmanFord(int start, vector<Muchie> &muchii, int N) {
    d.assign(N + 1, INF);
    tata.assign(N + 1, 0);

    d[start] = 0;
    for (int i = 1; i <= N - 1; i++) {
        for (auto& m : muchii) {
            if (d[m.u] + m.cost < d[m.v]) {
                d[m.v] = d[m.u] + m.cost;
                tata[m.v] = m.u; 
            }
        }
    }

    for (auto& m : muchii) {
        if (d[m.u] + m.cost < d[m.v]) {
            return true;
        }
    }

    return false;
}
int main() {
    int N, M;
    fin >> N >> M;

    vector<Muchie> muchii;
    for (int i = 0; i < M; i++) {
        int x, y, w;
        fin >> x >> y >> w;

        muchii.push_back(Muchie(x, y, w));
    }

    bool hasNegCycle = bellmanFord(1, muchii, N);
    
    if (hasNegCycle) {
        fout << "Ciclu negativ!" << endl;
    } else {
        for (int i = 2; i <= N; i++) {
            fout << d[i] << ' ';
        }
    }
    return 0;
}