Pagini recente » Cod sursa (job #1002352) | Cod sursa (job #473377) | Cod sursa (job #2270917) | Cod sursa (job #15560) | Cod sursa (job #1821089)
# include <fstream>
# include <vector>
# include <queue>
using namespace std;
struct path
{
int dest, cost;
path( int _dest, int _cost )
{
dest = _dest;
cost = _cost;
}
};
# define MAX_N 50000
vector<path> v[1 + MAX_N];
bool check[1 + MAX_N];
int dist[1 + MAX_N];
int cnt[1 + MAX_N];
# define undefined 1000000000
int main()
{
ifstream fin( "bellmanford.in" );
ofstream fout( "bellmanford.out" );
ios::sync_with_stdio( false );
int n, m, i, a, b, c;
fin >> n >> m;
for ( i = 0; i < m; i ++ ) {
fin >> a >> b >> c;
v[a].push_back( path( b, c ) );
}
queue<int> bellman;
bellman.push( 1 );
dist[1] = 0;
for ( i = 2; i <= n; i ++ )
dist[i] = undefined;
while ( bellman.size() && cnt[bellman.front()] <= n ) {
int t = bellman.front();
bellman.pop();
cnt[t] ++;
check[t] = false;
for ( path p : v[t] )
if ( p.cost + dist[t] < dist[p.dest] ) {
dist[p.dest] = dist[t] + p.cost;
if ( !check[p.dest] ) {
bellman.push( p.dest );
check[p.dest] = true;
}
}
}
bool negative_cycle = ( bellman.size() > 0 );
if ( negative_cycle )
fout << "Ciclu negativ!";
else
for ( i = 2; i <= n; i ++ )
fout << dist[i] << ' ';
fin.close();
fout.close();
return 0;
}