Cod sursa(job #3325416)

Utilizator MihneaDobrinDobrin Mihnea-Gabriel MihneaDobrin Data 25 noiembrie 2025 13:32:33
Problema Algoritmul Bellman-Ford Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>

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

const int INF = 2000000000;
const int NMAX = 50005;

struct Muchie {
    int u,v,c;
};
int N,M;
vector<Muchie> muchii;
int D[NMAX];
void bellmanford(int sursa)
{
    for(int i=1; i<=N; i++) {
        D[i]=INF;
    }
    D[sursa]=0;
    for(int i=1;i<=N-1;i++) {
        bool schimbare=false;
        for(auto& edge : muchii) {
            if(D[edge.u]!=INF && D[edge.u]+edge.c<D[edge.v]) {
                D[edge.v]=D[edge.u]+edge.c;
                schimbare=true;
            }
        }
        if(!schimbare)
            break;
    }
    bool cicluNegativ=false;
    for(auto& edge : muchii) {
        if (D[edge.u]!=INF && D[edge.u]+edge.c<D[edge.v]) {
            cicluNegativ=true;
            break;
        }
    }
    if(cicluNegativ)
        g<<"Ciclu negativ!\n";
    else
    {
        for(int i=2;i<=N;i++) {
            g<<D[i]<<" ";
        }
        g<<"\n";
    }
}
int main()
{
    f>>N>>M;
    int x,y,c;
    for(int i=0;i<M;i++)
    {
        f>>x>>y>>c;
        muchii.push_back({x,y,c});
    }
    bellmanford(1);
    return 0;
}