Pagini recente » Rezultatele filtrării | Cod sursa (job #2457722) | Cod sursa (job #2560327) | Cod sursa (job #43212) | Cod sursa (job #2774526)
#include<cstdio>
#include<vector>
#define N 50001
using namespace std;
vector<int> g[N],h[N];
int m,n,i,k,l,r,d[N],e[7*N],u[N],j,t;
bool v[N];
int main()
{
freopen("bellmanford.in","r",stdin),freopen("bellmanford.out","w",stdout),scanf("%d%d",&n,&m);
while(m--)
scanf("%d%d%d",&i,&j,&k),g[i].push_back(j),h[i].push_back(k);
for(i=1;i<=n;++i)
d[i]=N;
for(k=l=r=d[1]=0,e[r++]=v[1]=1;l<r&&!k;)
for(i=e[l++],t=g[i].size(),v[i]=j=0;j<t&&!k;++j)
if(d[g[i][j]]>d[i]+h[i][j]) {
d[g[i][j]]=d[i]+h[i][j];
if(!v[g[i][j]])
if(u[g[i][j]]>n)
k=1;
else
e[r++]=g[i][j],v[g[i][j]]=1,++u[g[i][j]];
}
if(k)
printf("Ciclu negativ!");
else
for(i=2;i<=n;++i)
printf("%d ",d[i]);
return 0;
}