Pagini recente » Cod sursa (job #2820066) | Cod sursa (job #939010) | Cod sursa (job #1231496) | Cod sursa (job #2133466) | Cod sursa (job #2138409)
#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;
};
vector<edge> v[maxn];
bool inserted[maxn]{false};
int used[maxn];
int main()
{
int n,m;
queue<int> que;
edge e;
in >> n >> m;
for(int i = 0 ;i < m ; i++)
{
in >> e.a>>e.b>>e.c;
v[e.a].push_back(e);
}
for(int i = 1 ; i<= n ; i++)
{
d[i] = 1<<30;
used[i] = 0;
inserted[i] = false;
}
d[1] =0;
que.push(1);
inserted[1] = true;
used[1] = 1;
int nod;
while(!que.empty() )
{
nod = que.front(); que.pop();
inserted[nod] = true;
for(edge nei:v[nod])
if(d[nod]+nei.c < d[nei.b])
{
if(!inserted[nei.b])
{
d[nei.b] = d[nod]+nei.c;
used[nei.b]++;
que.push(nei.b);
inserted[nei.b] =true;
if(used[nei.b]>n)
{
out<< "Ciclu negativ!";
return 0;
}
}
}
}
for(int i = 2 ; i <= n ; i++)
out<<d[i]<<" ";
}