Pagini recente » Cod sursa (job #1102195) | Cod sursa (job #396634) | Cod sursa (job #2509576) | Cod sursa (job #2519276) | Cod sursa (job #1959443)
#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;
}