Cod sursa(job #3303944)

Utilizator parrot279Sofi Tudose parrot279 Data 19 iulie 2025 14:16:57
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <fstream>
#include <queue>
#include <vector>
#include <utility>

using namespace std;
ifstream cin("bellmanford.in");
ofstream cout("bellmanford.out");
void bellmanford(int start);
const int marian = 2e9+7;

int n, m, d[50001], vizite[50001];
bool incoada[50001];
vector<pair<int, int>> vecini[50001];


int main()
{
    cin>>n>>m;
    for(int i = 1; i <= m; ++i)
    {
        int x, y, c;
        cin>>x>>y>>c;
        vecini[x].push_back({y, c});
    }
    bellmanford(1);



    return 0;
}



void bellmanford(int start)
{
    for(int i = 1; i <= n; ++i)
    {
        d[i] = marian;
        incoada[i] = false;
    }

    queue<int> q;
    d[start] = 0;
    vizite[start] = 1;
    incoada[start] = true;
    q.push(start);

    while(!q.empty())
    {
        int curent = q.front();
        incoada[curent] = false;
        q.pop();

        for(auto i : vecini[curent])
        {
            if(d[i.first] > d[curent] + i.second)
            {
                d[i.first] = d[curent] + i.second;
                ++vizite[i.first];
                if(vizite[i.first] >= n)
                {
                    cout<<"Ciclu negativ!";
                    return;
                }
                if(!incoada[i.first])
                {
                    incoada[i.first] = true;
                    q.push(i.first);
                }

            }
        }
    }
    for(int i = 2; i <= n; ++i)
    {
        cout<<d[i]<<" ";
    }
}