Nu aveti permisiuni pentru a descarca fisierul grader_test3.ok
Cod sursa(job #381856)
Utilizator | Data | 11 ianuarie 2010 20:26:35 | |
---|---|---|---|
Problema | Algoritmul Bellman-Ford | Scor | 35 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.78 kb |
#include <cstdio>
#define file_in "bellmanford.in"
#define file_out "bellmanford.out"
#define Nmax 250100
int m,n,x[Nmax*3],y[Nmax*3],c[Nmax*3],i,d[Nmax*3];
int main()
{
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d", &n, &m);
for (i=1;i<=m;++i)
{
scanf("%d %d %d", &x[i], &y[i], &c[i]);
if (x[i]==1)
d[y[i]]=c[i];
}
for (i=2;i<=n;++i)
if (d[i]==0) d[i]=0x3f3f3f3f;
int nr=0;
int ok=1;
while(ok)
{
nr++;
ok=0;
for (i=1;i<=m;++i)
if (d[y[i]]>d[x[i]]+c[i])
d[y[i]]=d[x[i]]+c[i],
ok=1;
if (nr>Nmax/2) {
printf("Ciclu negativ!\n");
return 0;
}
}
for (i=2;i<=n;++i)
printf("%d ", d[i]);
fclose(stdin);
fclose(stdout);
return 0;
}