Pagini recente » Cod sursa (job #704832) | Cod sursa (job #657455) | Cod sursa (job #1208061) | Cod sursa (job #678442) | Cod sursa (job #1118278)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#define Nmax 50005
#define INF 0x3f3f3f3f
using namespace std;
vector < pair <int, int> > L[Nmax];
queue <int> Q;
int d[Nmax], viz[Nmax], nr[Nmax];
int n, m;
void citire()
{
scanf("%d %d",&n, &m);
for (int i=1; i<=m; i++)
{
int x, y, c;
scanf("%d %d %d",&x, &y, &c);
L[x].push_back(make_pair(c, y));
}
}
void initializare()
{
for (int i=2; i<=n; i++)
d[i] = INF;
}
int bellmanFord()
{
Q.push(1);
viz[1] = 1;
nr[1] = 1;
while(!Q.empty())
{
int x = Q.front();
Q.pop();
viz[x] = 0;
for (int i=0; i<L[x].size(); i++)
{
int cost = L[x][i].first;
int vecin = L[x][i].second;
if (d[vecin] > d[x] + cost)
{
d[vecin] = d[x] + cost;
if (viz[vecin] == 0)
{
viz[vecin] = 1;
Q.push(vecin);
}
nr[vecin] ++;
if(nr[vecin] > n)
return 1;
}
}
}
return 0;
}
void afisare()
{
for (int i=2; i<=n; i++)
printf("%d ",d[i]);
}
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
citire();
initializare();
if (bellmanFord())
printf("Ciclu negativ!");
else
afisare();
return 0;
}