Cod sursa(job #3361665)

Utilizator ana_batAna Batatorescu ana_bat Data 27 iulie 2026 16:16:05
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#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);

    int p1, p2, c;

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

void bellmanford() {
    vector<int> dist(n + 1, 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;

            if (dist[p1] != inf && dist[p1] + c < dist[p2]) {
                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;
}