Pagini recente » Cod sursa (job #2666419) | Cod sursa (job #2769351) | Cod sursa (job #983031) | Cod sursa (job #654333) | Cod sursa (job #1060120)
#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];
bitset<Nmax> inQueue;
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);
inQueue[1] = 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;
if(!inQueue[it->next])
Q.push(it->next),inQueue[it->next] = 1;
}
}
}
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;
}