Cod sursa(job #2874798)

Utilizator pielevladutPiele Vladut Stefan pielevladut Data 20 martie 2022 11:31:56
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 50000;

int N, M;
bool inQueue[NMAX + 5];
int cntQueue[NMAX + 5];
int dist[NMAX + 5];

struct elem
{
    int nod, cost;
};

vector<elem> g[NMAX + 5];
queue<int> coada;

int main()
{
    fin >> N >> M;
    for(int i = 2; i <= N; i ++)
    {
        dist[i] = 1000000000;
    }
    while(M--)
    {
        int u, v, cost;
        fin >> u >> v >> cost;
        g[u].push_back({v, cost});
    }
    coada.push(1);
    inQueue[1] = true;
    cntQueue[1] ++;
    while(!coada.empty())
    {
        int nod = coada.front();
        coada.pop();
        inQueue[nod] = false;
        for(auto it : g[nod])
        {
            if(dist[nod] + it.cost < dist[it.nod])
            {
                dist[it.nod] = dist[nod] + it.cost;
                if(inQueue[it.nod]  == false)
                {
                    inQueue[it.nod] = true;
                    cntQueue[it.nod] ++;
                    coada.push(it.nod);
                    if(cntQueue[it.nod] == N)
                    {
                        fout << "Ciclu Negativ!";
                        return 0;
                    }
                }
            }
        }
    }
    for(int i = 2; i <= N; i ++)
    {
        fout << dist[i] << ' ';
    }
    return 0;
}