Pagini recente » Cod sursa (job #297389) | Cod sursa (job #1706017) | Cod sursa (job #846213) | Cod sursa (job #2462375) | Cod sursa (job #645559)
Cod sursa(job #645559)
#include <cstdio>
#define file_in "bellmanford.in"
#define file_out "bellmanford.out"
#define nmax 250100
int N,M,i;
int d[nmax];
int x[nmax];
int y[nmax];
int c[nmax];
#define D 8192
char g_buf[D];
int g_p=D-1;
inline int get()
{
int x=0,neg;
while ((g_buf[g_p]<'0' || g_buf[g_p]>'9') && g_buf[g_p]!='-')
if (++g_p==D) fread(g_buf,1,D,stdin),g_p=0;
neg=0;
if(g_buf[g_p]=='-'){ neg=1;
if(++g_p==D) fread(g_buf,1,D,stdin),g_p=0;
}
while (g_buf[g_p]>='0' && g_buf[g_p]<='9'){
x=x*10+g_buf[g_p]-'0';
if (++g_p==D) fread(g_buf,1,D,stdin),g_p=0;
}
if (neg) x=-x;
return x;
}
int main(){
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
N=get();
M=get();
for (i=1;i<=M;++i){
//scanf("%d %d %d", &x[i], &y[i], &c[i]);
x[i]=get();
y[i]=get();
c[i]=get();
if (x[i]==1)
d[y[i]]=c[i];
}
for (i=2;i<=N;++i)
if (d[i]==0)
d[i]=0x3f3f3f3f;
int ok=0;
int nr=0;
while(!ok){
ok=1;
nr++;
for (i=1;i<=M;++i)
if (d[y[i]]>d[x[i]]+c[i])
d[y[i]]=d[x[i]]+c[i],
ok=0;
//nr++;
if (nr>nmax/10){
printf("Ciclu negativ!\n");
return 0;
}
}
for (i=2;i<=N;++i)
printf("%d ", d[i]);
return 0;
}