Pagini recente » Cod sursa (job #650695) | Cod sursa (job #110530) | Cod sursa (job #2176696) | Cod sursa (job #748590) | Cod sursa (job #2972558)
#include <fstream>
#include <queue>
#include <vector>
#define INF 0x3f3f3f3f
using namespace std;
ifstream cin("bellmanford.in");
ofstream cout("bellmanford.out");
queue <int> q;
vector <int> G[50001],C[50001];
int ciclu[50001];
int d[50001],n,m,x,y,c,p,i;
int bellmanfors(int start)
{
for(int i=1;i<=n;i++)
d[i] = INF;
d[start] =0;
q.push(start);
while(!q.empty())
{
x = q.front();
ciclu[x]++;
if(ciclu[x] > n){
return -1;
}
for(i = 0; i<G[x].size();++i)
{
if(d[G[x][i]] > d[x] + C[x][i])
{
d[G[x][i]] = d[x] + C[x][i];
q.push(G[x][i]);
}
}
q.pop();
}
return 1;
}
int main()
{
cin>>n>>m;
while(m--)
{
cin>>x>>y>>c;
G[x].push_back(y);
C[x].push_back(c);
}
int c = bellmanfors(1);
if(c>0)
for(int i=2;i<=n;i++)
cout<<d[i]<<' ';
else cout<<"Ciclu negativ!";
return 0;
}