Pagini recente » Cod sursa (job #2487276) | Cod sursa (job #2961196) | Cod sursa (job #1590244) | Cod sursa (job #3280415) | Cod sursa (job #1620919)
#include <fstream>
#define inf 1<<30
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
struct graf{
int nod,cost;
graf *urm;
}*v[100000];
int use[100000],f[100000],c[100000];
int Q[100000],n,m,OK;
void add(int a, int b, int c){
graf *p=new graf;
p->nod=b;
p->cost=c;
p->urm=v[a];
v[a]=p;
}
void bell(){
int p,u,x;
graf *nod;
p=u=1;
Q[1]=1;
for(;p<=u;){
x=Q[p]; p++;
for(nod=v[x];nod;nod=nod->urm){
if(c[nod->nod]>nod->cost+c[x]){
c[nod->nod]=nod->cost+c[x];
if(!use[nod->nod]){
use[nod->nod]=1;
Q[++u]=nod->nod;
}
f[nod->nod]++;
if(f[nod->nod]==n){
OK=1;
return;
}
}
}
use[x]=0;
}
}
int main()
{
int a,b,d;
fin>>n>>m;
for(int i=1;i<=m;i++){
fin>>a>>b>>d;
add(a,b,d);
}
for(int i=2;i<=n;i++)
c[i]=inf;
bell();
if(!OK)
for(int i=2;i<=n;i++)
fout<<c[i]<<' ';
else
fout<<"Ciclu negativ!";
return 0;
}