Cod sursa(job #1852845)

Utilizator caprariuapCaprariu Alin-Paul caprariuap Data 21 ianuarie 2017 11:04:43
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <vector>
#include <queue>

using namespace std;

vector <int> v[50010],c[50010];
queue <int> q;
bool in[50010],nok;
int nre[50010],d[50010];
int n,m,i,j;

int main()
{
    cin >> n >> m;
    for (i=1; i<=m; i++)
    {
        int A,B,C;
        cin >> A >> B >> C;
        v[A].push_back(B);
        c[A].push_back(C);
        if (A==1)
            d[B]=C;
    }
    q.push(1);
    in[1]=1;
    nre[1]=1;
    for (i=2; i<=n; i++)
//        if (d[i]==0)
            d[i]=260000000;
    d[1]=0;
    while (!q.empty())
    {
        int nod=q.front();
        q.pop();
        in[nod]=0;
        for (i=0; i<v[nod].size(); i++)
        {
            int vecin=v[nod][i];
            int cost=c[nod][i];
            if (d[vecin]>d[nod]+cost)
            {
                d[vecin]=d[nod]+cost;
                if (in[vecin]==0)
                {
                    in[vecin]=1;
                    q.push(vecin);
                    nre[vecin]++;
                    if (nre[vecin]>=n)
                        {
                            cout << "Ciclu negativ!\0";
                            return 0;
                        }
                }
            }
        }
    }
    for (i=2; i<=n; i++)
        cout << d[i] << ' ';
    cout << '\n';
}