Pagini recente » Cod sursa (job #2326591) | Cod sursa (job #677013) | Cod sursa (job #2107274) | Cod sursa (job #2531827) | Cod sursa (job #1324342)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
vector<int>v[50002];
vector<int>c[50002];
queue<int>q;
int n,m,ok,cost[50002],t[50002];
int inf=999999999;
int bellman()
{
int nod;
cost[1]=0;
q.push(1);
while(!q.empty())
{
nod=q.front();
q.pop();
for(int i=0;i<v[nod].size();i++)
{
if(cost[v[nod][i]]>cost[nod]+c[nod][i])
{
cost[v[nod][i]]=cost[nod]+c[nod][i];
t[v[nod][i]]++;
if(t[v[nod][i]]>n)
return 0;
q.push(v[nod][i]);
}
}
}
return 1;
}
int main()
{
int x,y,co;
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>co;
v[x].push_back(y);
c[x].push_back(co);
}
for(int i=2;i<=n;i++)
cost[i]=inf;
ok=bellman();
if(ok==0)
fout<<"Ciclu negativ!";
else
for(int i=2;i<=n;i++)
fout<<cost[i]<<' ';
}