Pagini recente » Cod sursa (job #336380) | Cod sursa (job #973645) | Monitorul de evaluare | Cod sursa (job #601968) | Cod sursa (job #1146979)
#include <cstdio>
#include <vector>
#include <utility>
#include <deque>
#define N 50010
using namespace std;
int n,m,nod,ve,co,i,q[N],cst[N],cnt[N],oo=250010*1010;
vector<pair<int,int> > V[N];
deque<int> Q;
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
scanf("%d%d",&n,&m);
for(;m;m--)
{
scanf("%d%d%d",&nod,&ve,&co);
V[nod].push_back(make_pair(ve,co));
}
for(i=2;i<=n;i++)cst[i]=oo;
q[1]=1;Q.push_back(1);
for(;Q.size();)
{
nod=Q.front();
co=cst[nod];
for(vector<pair<int,int> >::iterator it=V[nod].begin();it!=V[nod].end();it++)
if(cst[it->first]>co+it->second)
{
cst[it->first]=co+it->second;
if(!q[it->first])
{
cnt[it->first]++;
if(cnt[it->first]>n)
{
printf("Ciclu negativ!");
return 0;
}
q[it->first]=1;
Q.push_back(it->first);
}
}
Q.pop_front();
}
for(i=2;i<=n;i++)
printf("%d ",cst[i]);
return 0;
}