Pagini recente » Cod sursa (job #2169946) | Cod sursa (job #1739564) | Cod sursa (job #644736) | Cod sursa (job #2273278) | Cod sursa (job #473263)
Cod sursa(job #473263)
#include <vector>
#include <cstdio>
#include <utility>
#include <queue>
#define N 50001
using namespace std;
vector<pair<int,int> > b[N];
queue<int> q;
int cost[N];
bool isQ[N];
int main ()
{freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
int n,m,x,y,z,i,j,p,aux;
scanf("%d %d",&n,&m);
memset(cost,0x7f,sizeof(*cost)*(n+1));
for (i=1;i<=m;i++)
{scanf("%d %d %d",&x,&y,&z);
b[x].push_back(make_pair(y,z));
}
cost[1]=0;
q.push(1);
isQ[1]=1;
q.push(-1);
for (i=2;i<=n;i++)
{while(q.front()!=-1)
{isQ[q.front()]=0;
for (j=0;j<b[(p=q.front())].size();j++)
{if((aux=cost[p]+b[p][j].second)<cost[b[p][j].first])
{cost[b[p][j].first]=aux;
if(isQ[b[p][j].first]==0)
{q.push(b[p][j].first);
isQ[b[p][j].first]=1;
}
}
}
q.pop();
}
q.pop();
q.push(-1);
}
for (i=1;i<=n;i++)
{for (j=0;j<b[i].size();j++)
{if(cost[i]+b[i][j].second<cost[b[i][j].first])
{printf("Ciclu negativ!");
return 0;
}
}
}
for(i=2;i<=n;i++)
{printf("%d ",cost[i]);
}
return 0;
}