Cod sursa(job #2722256)

Utilizator valentinchipuc123Valentin Chipuc valentinchipuc123 Data 12 martie 2021 18:11:59
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda no-time-rest-v3 Marime 1.24 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m,dp[50005],ct[50005];
bool fost[50005];
vector< pair<int,int> > vecini[50005];
queue< int > coada;

int main()
{
    f>>n>>m;
    for(int i=1; i<=m; i++)
    {
        int x,y,cost;
        f>>x>>y>>cost;
        vecini[x].push_back( make_pair(y,cost) );
    }
    for(int i=1; i<=n; i++) dp[i]=2000000000;
    dp[1]=0;

    coada.push( 1 );
    fost[1]=1;

    while( !coada.empty() )
    {
        int nod=coada.front();
        fost[nod]=0;
        coada.pop();

        for(int i=0; i<vecini[nod].size(); i++)
        {
            int x=vecini[nod][i].first,cost=vecini[nod][i].second;

            if( dp[nod]+cost<dp[x] )
            {
                if( fost[x]==1 ) dp[x]=dp[nod]+cost;
                else
                {
                    if(ct[x]>=n){
                     g<<"Ciclu negativ!";
                     return 0;
                    }

                    fost[x]=1;
                    dp[x]=dp[nod]+cost;
                    coada.push(x);
                    ct[x]++;
                }
            }
        }
    }

    for(int i=2; i<=n; i++) g<<dp[i]<<' ';
}