Pagini recente » Cod sursa (job #2177857) | Cod sursa (job #1989279) | Cod sursa (job #2272654) | Cod sursa (job #797520) | Cod sursa (job #1060123)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
#include <bitset>
#include <memory.h>
#define Nmax 50005
#define cost first
#define next second
#define pb push_back
#define mp make_pair
#define INF 0x3f3f3f3f
using namespace std;
int n,m,D[Nmax],times[Nmax];
vector<pair<int,int> > G[Nmax];
queue<int> Q;
void read()
{
scanf("%d%d",&n,&m);
int a,b,c;
for(int i = 1;i <= m ; ++i)
{
scanf("%d%d%d",&a,&b,&c);
G[a].pb(mp(c,b));
}
memset(D,INF,sizeof(D));
D[1] = 0;
}
int bun = 1;
void bellman_ford()
{
Q.push(1);
int nodc;
while(!Q.empty() && bun)
{
nodc = Q.front();
Q.pop();
for(vector<pair<int,int> > ::iterator it = G[nodc].begin();it != G[nodc].end(); ++it)
if(D[it->next] > D[nodc] + it->cost)
{
D[it->next] = D[nodc] + it->cost;
times[it->next]++;
if(times[it->next] > n) bun = 0;
Q.push(it->next);
}
}
}
void afish()
{
if (bun == 0)
printf("Ciclu negativ!\n");
else
for(int i = 2;i <= n; ++i)
printf("%d ",D[i]);
}
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
read();
bellman_ford();
afish();
return 0;
}