Cod sursa(job #2098749)

Utilizator vlad6001Pintilie Vlad vlad6001 Data 3 ianuarie 2018 14:42:16
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
#include <vector>
#include <queue>
#define INF 10000000000000
using namespace std;

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

long long noduri, muchii, a, b, c, nod, dist[50004], inq[50004], vasea[50004];

struct Vecin
{
    long long nod, cost;
}drum;
vector <Vecin> vec[50004];
queue <long long> lista;

int main()
{
    cin >> noduri >> muchii;
    for(int i=1; i <= muchii; i++)
    {
        cin >> a >> b >> c;
        vec[a].push_back({b,c});
    }
    for(int i=1; i <= noduri; i++)
    dist[i] = INF;
    dist[1] = 0;

    lista.push(1);

    while(lista.empty() == false)
    {
        nod = lista.front();
        lista.pop();
        inq[nod] = 0;

        for(int i=0; i < vec[nod].size(); i++)
        {
            drum = vec[nod][i];
            if(dist[drum.nod] > dist[nod]+drum.cost)
            {
                dist[drum.nod] = dist[nod]+drum.cost;
                vasea[drum.nod]++;
                if(vasea[drum.nod] == noduri)
                {
                    cout << "Ciclu negativ!";
                    return 0;
                }
                if(inq[drum.nod] == 0)
                {
                    inq[drum.nod] = 1;
                    lista.push(drum.nod);
                }
            }
        }
    }
    for(int i=2; i <= noduri; i++)
    {
        cout << dist[i] << ' ';
    }
}