Cod sursa(job #1887774)

Utilizator jordan1998Jordan jordan1998 Data 21 februarie 2017 19:19:05
Problema Algoritmul Bellman-Ford Scor 15
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#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]<<" ";
}