Cod sursa(job #3327097)

Utilizator D4R1U5Sava Darius D4R1U5 Data 2 decembrie 2025 11:19:20
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream f("bellmanford.in");
ofstream g("bellmanford.out");

const long long INF = 1e18;
const int MAXN = 50000;

int n, m;

struct Muchie {
    int u,v,cost;
};

vector<Muchie> muchii;

bool cicluNegativ=false;

vector<long long> BellmanFord (int start, vector<int> &tata){
    vector <long long> d(n+1, INF);
    d[start] = 0;

    for (int i=1;i<=n-1;i++) {
        for (const auto& m : muchii) {
            if (d[m.u]!=INF) {
                if (d[m.u]+m.cost<d[m.v]) {
                    d[m.v]=d[m.u]+m.cost;
                    tata[m.v]=m.u;
                }
            }
        }
    }

    for (const auto& m : muchii) {
        if (d[m.u] != INF && d[m.u] + m.cost < d[m.v]) {
            cicluNegativ=true;
        }
    }

    return d;
}

int main() {
    f>>n>>m;

    for (int i=1;i<=m;i++){
        int x, y, c;
        f>>x>>y>>c;
        muchii.push_back({x, y, c});
    }

    vector<int> tata(n+1, 0);
    vector<long long> dist = BellmanFord(1, tata);

    if (cicluNegativ==true){
        g<<"Ciclu negativ!"<<'\n';
    }
    else{
        for (int i=2;i<=n;i++) {
            if (dist[i]==INF) g<<0<<" ";
            else g<<dist[i]<<" ";
        }
    }
    return 0;
}