Pagini recente » Cod sursa (job #2275138) | Cod sursa (job #3201639) | Cod sursa (job #2025376) | Cod sursa (job #1258314) | Cod sursa (job #1887774)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;//enq=e in h
int d[50002],a,b,c,i,j,n,m,nod;
bool enq[50002];
long long int pas=0,lgmm;
struct gigi{int a,b,c;}x;
std::vector <int>h;
std::vector <gigi>v[50002];
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x.a>>x.b>>x.c;
v[x.a].push_back(x);
}
d[1]=0;
for(i=2;i<=n;i++)
d[i]=50000003;
h.push_back(1);
enq[1]=true;
lgmm=1LL*m*n+1;
while(!h.empty()&&pas<=lgmm+1)
{
pas++;
nod=h.back();
h.pop_back();
enq[nod]=false;
b=v[nod].size();
for(j=0;j<b;j++)
if(d[v[nod][j].b]>d[nod]+v[nod][j].c)
{
d[v[nod][j].b]=d[nod]+v[nod][j].c;
if(!enq[v[nod][j].b])
{
enq[v[nod][j].b]=true;
h.push_back(v[nod][j].b);
}
}
}
if(pas==lgmm) g<<"Ciclu negativ!";
else
for(i=2;i<=n;i++)
g<<d[i]<<" ";
}