Pagini recente » Cod sursa (job #297519) | Cod sursa (job #1963427) | Cod sursa (job #553007) | Cod sursa (job #1226372) | Cod sursa (job #2091234)
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#define f first
#define s second
using namespace std;
ifstream F("bellmanford.in");
ofstream G("bellmanford.out");
int n, m, c, x, y,d[50005], knod[50005];
const int inf = 1 << 30;
queue<int> q;
vector<pair<int, int> > a[50005];
bitset<50006>inq;
int main()
{
F >> n >> m;
for( int i = 1; i <= m; ++ i )
{
F >> x >> y >> c;
a[x].push_back({y, c});
}
for( int i = 2; i <= n; ++ i ) d[ i ] = inf;
q.push(1);inq[1] = 1;
vector<pair<int, int> > :: iterator it;
while(!q.empty())
{
x = q.front();
q.pop();
inq[x] = 0;
for( it = a[x].begin(); it != a[x].end(); ++ it )
if( d[ (*it).f ] > d[ x ] + (*it).s )
{
d[ (*it).f ] = d[ x ] + (*it).s;
if(!inq[(*it).f]) q.push((*it).f), inq[(*it).f] = 1;
if(++knod[(*it).f] > n)
{
G << "Ciclu negativ!";
return 0;
}
}
}
for( int i = 2; i <= n; ++ i )
G << d[i] << " ";
return 0;
}