Pagini recente » Cod sursa (job #1227363) | Cod sursa (job #1024804) | Cod sursa (job #938610) | Cod sursa (job #2672708) | Cod sursa (job #2138401)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
#define maxm 250010
#define maxn 50010
int d[maxn];
struct edge
{
int a,b,c;
}e[maxm];
vector<edge> v[maxn];
bool visited[maxn]{false};
int main()
{
int n,m;
queue<int> que;
in >> n >> m;
for(int i = 0 ;i < m ; i++)
{
in >> e[i].a>>e[i].b>>e[i].c;
v[e[i].a].push_back(e[i]);
}
for(int i = 1 ; i<= n ; i++)
d[i] = 1<<30;
d[1] =0;
que.push(1);
int nod;
int counter = 0;
while(!que.empty() && counter <= n*m)
{
counter++;
nod = que.front(); que.pop();
visited[nod] = true;
for(edge nei:v[nod])
if(d[nod]+nei.c < d[nei.b])
{
if(!visited[nei.b])
{
d[nei.b] = d[nod]+nei.c;
que.push(nei.b);
}
}
}
for(edge nou:e)
{
if (d[nou.a] + nou.c < d[nou.b])
{
out<<"Ciclu negativ!";
return 0;
}
}
for(int i = 2 ; i <= n ; i++)
out<<d[i]<<" ";
}