Cod sursa(job #1959443)

Utilizator vlasiuflaviusVlasiu Flavius vlasiuflavius Data 9 aprilie 2017 15:07:18
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ofstream fout ("bellmanford.out");
ifstream fin  ("bellmanford.in");
vector < pair < int , int > > v[50005];
queue <int> q;
int a,b,c,n,m,cost[50005],i,aux,viz[50005],ciclu_negativ;
const int oo = 2000000000;
int main()
{
    fin>>n>>m;
    for( i = 1 ; i <= m ; i++ )
    {
        fin>>a>>b>>c;
        v[ a ].push_back( make_pair( b , c ) );
    }
    for( i = 2 ; i <= n ; i++ )
        cost[ i ] = oo;
    cost[ 1 ] = 0;
    q.push( 1 );
    while( !q.empty() && !ciclu_negativ)
    {
        aux = q.front();
        q.pop();
        for( i = 0 ; i < v[ aux ].size() ; i++ )
        {
            if( cost[ v[ aux ][ i ].first ] > cost[ aux ] + v[ aux ][ i ].second )
            {
                cost[ v[ aux ][ i ].first ] = cost[ aux ] + v[ aux ][ i ].second;
                viz[ v[ aux ][ i ].first ]++;
                if( viz[ v[ aux ][ i ].first ] > n )
                    ciclu_negativ = 1;
                q.push( v[ aux ][ i ].first );
            }
        }
    }
    if( ciclu_negativ )
        fout<<"Ciclu negativ!";
    else
    {
        for( i = 2 ; i <= n ; i++ )
            fout<<cost[ i ]<<" ";
    }
    return 0;
}