Pagini recente » Cod sursa (job #1858085) | Cod sursa (job #1517843) | Cod sursa (job #3196784) | 11_martie_simulare_oji_2024_clasa_9 | Cod sursa (job #1887813)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
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 b,c;}x,y;
std::vector <gigi>h;
std::vector <gigi>v[50002];
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
bool cmp(gigi a,gigi b){ return(a.c<b.c);}
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>a>>x.b>>x.c;
v[a].push_back(x);
}
d[1]=0;
for(i=2;i<=n;i++)
d[i]=50000003;
x.b=1;x.c=0;
h.push_back(x);
make_heap(h.begin(),h.end(),cmp);
enq[1]=true;
lgmm=1LL*m*n+1;
while(!h.empty()&&pas<=lgmm)
{
pas++;
pop_heap(h.begin(),h.end(),cmp);
x=h.back();
nod=x.b;
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;
y.b=v[nod][j].b;
y.c=d[v[nod][j].b];
h.push_back(y);
push_heap(h.begin(),h.end(),cmp);
}
}
}
if(pas>=lgmm) g<<"Ciclu negativ!";
else
for(i=2;i<=n;i++)
g<<d[i]<<" ";
}