Cod sursa(job #1920635)

Utilizator Harsan_SabinHarsan Sabin Harsan_Sabin Data 10 martie 2017 08:50:45
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <list>
#include <queue>
#define cs pair<int,int>
#define y second
#define x first

using namespace std;

ifstream cin("bellmanford.in");
ofstream cout("bellmanford.out");

int n,m,a,b,c,cu,d[50001],ve[50001];

list<cs> Gf[50001];
list<cs> ::iterator it;

queue<int>Q;

int main()
{
    cin>>n>>m;

    for(int i=1;i<=m;++i)
    {
        cin>>a>>b>>c;

        Gf[a].push_back(make_pair(b,c));
    }

    for(int i=2;i<=n;++i)
        d[i]=1<<30;

    Q.push(1);

    while(!Q.empty())
    {
        cu=Q.front();

        for(it=Gf[cu].begin();it!=Gf[cu].end();++it)
            if(d[it->x]>d[cu]+it->y)
            {
                d[it->x]=d[cu]+it->y;
                Q.push(it->x);

                ++ve[it->x];
                if(ve[it->x]>=n)
                {
                    cout<<"Ciclu negativ!\n";
                    return 0;
                }
            }

        Q.pop();
    }

    for(int i=2;i<=n;++i)
        cout<<d[i]<<' ';

    return 0;
}