Cod sursa(job #3327607)

Utilizator AndrrreiAndrei Seniuc Andrrrei Data 4 decembrie 2025 16:43:32
Problema Algoritmul Bellman-Ford Scor 15
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

const int INF = 2000000000; 
const int N_MAX = 50005;

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

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

int dist[N_MAX];
vector<Edge> edges; 


void BellmanFord(int N)
{
    for (int i = 1; i <= N - 1; ++i) {
        bool changed = false; 

        for (const auto& edge : edges) {
            if (dist[edge.u] != INF && dist[edge.u] + edge.cost < dist[edge.v]) {
                dist[edge.v] = dist[edge.u] + edge.cost;
                changed = true;
            }
        }
        
        if (!changed) break; 
    }

    bool hasNegativeCycle = false;
    for (const auto& edge : edges) {
        if (dist[edge.u] != INF && dist[edge.u] + edge.cost < dist[edge.v]) {
            hasNegativeCycle = true;
            fout << "negativ";
            return;
        }
    }

    for (int i = 2; i <= N; ++i) {
        fout << dist[i] << " ";
    }
}

int main() {

    int N, M;
    fin >> N >> M;

    for (int i = 0; i < M; ++i) {
        int u, v, c;
        fin >> u >> v >> c;
        edges.push_back({u, v, c});
    }

    for (int i = 1; i <= N; ++i) {
        dist[i] = INF;
    }
    dist[1] = 0; 
    
    BellmanFord(N);

    fin.close();
    fout.close();

    return 0;
}