Pagini recente » Cod sursa (job #1326445) | Cod sursa (job #282324) | Cod sursa (job #1198331) | Cod sursa (job #3222391) | Cod sursa (job #3206319)
#include <iostream>
#include <fstream>
#define maxi 999999999
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int n,m,a,c1,b,t[3][500001],k,start[500001],cost[50005],c[50005],viz[50005],cnt[50005],ok=1;
void ford(int p)
{
int i,ps=1,pi=1,val,k;
for(i=1;i<=n;i++)
cost[i]=maxi;
cost[p]=0;
c[pi]=p;
while(ps<=pi)
{
k=c[ps];
viz[k]=0;
val=start[k];
while(val)
{
if(cost[k]+t[2][val]<cost[t[0][val]])
{
cost[t[0][val]]=cost[k]+t[2][val];
if(!viz[t[0][val]])
viz[t[0][val]]=1, c[++pi]=t[0][val];
cnt[t[0][val]]++;
if(cnt[t[0][val]]>n)
{
ok=0;
break;
}
}
val=t[1][val];
}
ps++;
if(ok==0)
break;
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=m;i++)
{
f>>a>>b>>c1;
k++;
t[0][k]=b;
t[1][k]=start[a];
t[2][k]=c1;
start[a]=k;
}
ford(1);
if(ok)
for(int i=2;i<=n;i++)
g<<cost[i]<<" ";
else
g<<"Ciclu negativ!";
return 0;
}