Cod sursa(job #3361664)

Utilizator ana_batAna Batatorescu ana_bat Data 27 iulie 2026 15:31:14
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
///https://infoarena.ro/problema/bellmanford
#include<iostream>
#include<fstream>
#include<vector>
#include<tuple>
using namespace std;

vector<tuple<int,int,int>> edges;
int n, m;

const int inf = 1e9;

void citire() {
    ifstream fin("bellmanford.in");
    fin >> n >> m;
    edges.resize(m+1);
    int p1, p2, c;

    for (int i = 1; i <= m; i++) {
        fin >> p1 >> p2 >> c;
        edges[i] = make_tuple(p1, p2, c);
    }
}

void bellmanford() {
    int dist[n+1];

    for (int i = 1; i <= n; i++) {
        dist[i] = inf;
    }
    dist[1] = 0;

    for (int i = 1; i <= n-1; i++) {
        for ( auto e: edges) {
            int p1, p2, c;
            tie(p1, p2, c) = e;
            dist[p2] = min(dist[p2], dist[p1]+c);
        }
    }

    bool neg = false;

    for (auto e : edges) {
        int p1, p2, c;
        tie(p1, p2, c) = e;

        if (dist[p1] != inf &&
            dist[p1] + c < dist[p2]) {
            neg = true;
            break;
            }
    }

    ofstream fout("bellmanford.out");

    if (neg) {
        fout << "Ciclu negativ!";
    }
    else
        for ( int i=2 ; i<=n ; i++)
            fout << dist[i] << " ";


}

int main() {
    citire();
    bellmanford();

    return 0;
}