Pagini recente » Borderou de evaluare (job #2450957) | Cod sursa (job #749341) | Cod sursa (job #3141619) | Monitorul de evaluare | Cod sursa (job #894996)
Cod sursa(job #894996)
#include<cstdio>
#include<list>
#include<vector>
#define inf 210000
using namespace std;
FILE *fin= fopen("bellmanford.in", "r");
FILE *fout=fopen("bellmanford.out","w");
int i,j,n,m,c,d[50001];
struct nod
{
int cost,nr;
}p;
list<nod> lista;
list<nod>:: iterator it;
vector< list<nod> > l(50001,lista);
int minimize()
{
int ok=0;
for(int j=1;j<=n;++j)
for(it=l[j].begin();it!=l[j].end();++it)
if(d[it->nr]>d[j]+it->cost)
{
ok=1;
d[it->nr]=d[j]+it->cost;
}
return ok;
}
int main()
{
fscanf(fin,"%d%d",&n,&m);
for(int ii=1;ii<=m;++ii)
{
fscanf(fin,"%d%d%d",&i,&j,&c);
nod p;
p.nr=j; p.cost=c;
l[i].push_back(p);
}
for(i=2;i<=n;++i)
d[i]=inf;
for(i=1;i<=n-1;++i)
minimize();
int ok=minimize();
if(ok)
fprintf(fout,"Ciclu negativ!");
else
for(i=2;i<=n;++i)
fprintf(fout,"%d ",d[i]);
return 0;
}