Pagini recente » Cod sursa (job #727829) | Cod sursa (job #1828558) | Cod sursa (job #298098) | Cod sursa (job #2178367) | Cod sursa (job #674259)
Cod sursa(job #674259)
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<vector>
#include<deque>
#define Nmax 50009
#define pb push_back
#define mp make_pair
#define inf 0x3f3f3f
#define nod first
#define cost second
using namespace std;
vector<pair<int,int> > a[Nmax];
vector<pair<int,int> >::iterator it;
deque<int> Q;
int n,m,i,x,y,c,D[Nmax];
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&c);
a[x].pb(mp(y,c));
}
memset(D,inf,sizeof(D));
D[1]=0;
Q.pb(1);
while (!Q.empty())
{
x=Q.front();
for (it=a[x].begin();it!=a[x].end();it++)
if (D[x]+(*it).cost<D[(*it).nod])
{
if (D[(*it).nod]<0)
{
printf("Ciclu negativ!\n");
return 0;
}
D[(*it).nod]=D[x]+(*it).cost;
Q.pb((*it).nod);
}
Q.pop_front();
}
for (i=2;i<=n;i++)
printf("%d ",D[i]);
}