Cod sursa(job #3343071)

Utilizator Cristian_NegoitaCristian Negoita Cristian_Negoita Data 26 februarie 2026 14:06:49
Problema Algoritmul Bellman-Ford Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
const int NMAX = 50001, INF = 5e8;
int n, m, dist[NMAX];
vector<array<int, 3>> edges;

bool Bellman(int source)
{
    fill(dist + 1, dist + n + 1, INF);
    dist[source] = 0;
    for(int it = 1; it <= n; it++)
    {
        bool better = false;
        for(auto [u, v, cost] : edges)
        {
            if(dist[v] > dist[u] + cost)
            {
                dist[v] = dist[u] + cost;
                better = true;
            }
        }
        if(!better)
            return false;
        if(it == n && better)
            return true;
    }
    return false;
}

int main()
{
    fin >> n >> m;
    while(m--)
    {
        int u, v, cost;
        fin >> u >> v >> cost;
        edges.push_back({u, v, cost});
    }
    if(Bellman(1))
        fout << "Ciclu negativ!";
    else
        for(int node = 2; node <= n; node++)
            fout << dist[node] << " ";

    fin.close();
    fout.close();
    return 0;
}