Pagini recente » Cod sursa (job #320865) | Cod sursa (job #185650) | Cod sursa (job #2019613) | Cod sursa (job #1918748) | Cod sursa (job #1026940)
#include<stdio.h>
#include<queue>
#include<vector>
using namespace std;
typedef struct nod
{
int x,c;
}nod;
queue <int> q;
vector <nod> v[50002];
nod aux;
int n,f[50002],viz[50002],sol=1;
void rez()
{
int i,x,nr;
while(!q.empty())
{
x=q.front();
nr=v[x].size();
q.pop();
for(i=0;i<nr;++i)
{
if(f[x]+v[x][i].c<f[v[x][i].x])
{
++viz[v[x][i].x];
if(viz[v[x][i].x]>n)
sol=0;
f[v[x][i].x]=f[x]+v[x][i].c;
q.push(v[x][i].x);
}
}
}
}
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
int m,x,y,i;
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&aux.c);
aux.x=y;
v[x].push_back(aux);
aux.x=x;
//v[y].push_back(aux);
}
for(i=2;i<=n;++i)
f[i]=2000000000;
q.push(1);
rez();
if(sol)
{
for(i=2;i<=n;++i)
if(f[i]==2000000000)
printf("0 ");
else
printf("%d ",f[i]);
}
else
printf("Ciclu negativ!");
printf("\n");
return 0;
}