Cod sursa(job #2576245)

Utilizator andaraluca2001Anda Epure andaraluca2001 Data 6 martie 2020 18:03:32
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
const int MAX=50006;
const int INF = 1e9;
int n,m,st,dr,c,nrq[MAX],d[MAX],pret,y;
bool inq[MAX];
vector<pair<int,int> >graf[MAX];
queue<int>q;
void bellmanford(int start)
{
    for(int i=1;i<=n;i++) d[i]=INF;
    d[start]=0;
    inq[start]=true;
    nrq[start]++;
    q.push(start);

    while(!q.empty())
    {
        int x;
        x=q.front();
        q.pop();
        inq[x]=false;

        if(nrq[x]==n)
        {
            out<<"Ciclu negativ";
            exit(0);
        }

        for(int i=0;i<graf[x].size();i++)
        {
            pair<int,int>p=graf[x][i];
            y=p.second;
            c=p.first;

            if(d[x]+c<d[y])
            {
                d[y]=d[x]+c;
                if(inq[y]==false)
                {
                    inq[y]=true;
                    q.push(y);
                    nrq[y]++;
                }

            }

        }
    }

}
int main()
{
    in>>n>>m;

    for(int i=1;i<=n;i++)
    {
        in>>st>>dr>>pret;
        graf[st].push_back(make_pair(pret,dr));
    }

    bellmanford(1);
     for(int i=2;i<=n;i++) out<<d[i]<<" ";

    return 0;
}