Cod sursa(job #2393067)

Utilizator ezioconnorVlad - Gabriel Iftimescu ezioconnor Data 30 martie 2019 19:16:41
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m, distanta[50001], f[50001];
vector < pair <int, int> > Muchii[50001];
queue <int> coada;

inline void citire()
{
    int x, y, c;
    in >> n >> m;
    for (int i = 1; i <= m; ++i)
    {
        in >> x >> y >> c;
        Muchii[x].push_back({y, c});
    }
}

inline void BFS(int nodStart)
{
    int nod, vecin, cost;
    coada.push(nodStart);
    while (!coada.empty())
    {
        nod = coada.front();
        ++f[nod];
        coada.pop();
        for (int i = 0; i < Muchii[nod].size(); ++i)
        {
            vecin = Muchii[nod][i].first;
            cost = Muchii[nod][i].second;
            if (distanta[vecin] > distanta[nod] + cost)
            {
                if (f[vecin] == n)
                {
                    out << "Ciclu negativ!";
                    return;
                }
                distanta[vecin] = distanta[nod] + cost;
                coada.push(vecin);
            }
        }
    }
    for (int i = 2; i <= n; ++i)
        out << distanta[i] << " ";
}

int main()
{
    citire();
    for (int i = 2; i <= n; ++i)
        distanta[i] = (1 << 29);
    BFS(1);
    return 0;
}