Cod sursa(job #2403562)

Utilizator radumihaisirbuSirbu Radu-Mihai radumihaisirbu Data 11 aprilie 2019 18:09:10
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("bellmanford.in");
ofstream fout ("bellmanford.out");

#define to first
#define cost second

const int nmax = 5e4 + 5, inf = 1e9;

vector <pair <int, int> > v[nmax];

vector <int> d(nmax, inf);

bool ciclu_negativ = false;

int n, m, viz[nmax], x, y, c;

void bfs ()
{
    queue <int> q;

    int node;

    q.push(1);

    d[1] = 0;

    while (!q.empty())
    {
        node = q.front();
        q.pop();
        if (viz[node] == n)
        {
            ciclu_negativ = true;
            return;
        }
        viz[node]++;
        for (int i=0; i<v[node].size(); ++i)
            if (d[v[node][i].to] > d[node] + v[node][i].cost)
            {
                d[v[node][i].to] = d[node] + v[node][i].cost;
                q.push(v[node][i].to);
            }
    }
}

int main()
{
    fin >> n >> m;
    while (m--)
    {
        fin >> x >> y >> c;
        v[x].push_back(make_pair(y, c));
    }
    bfs();
    if (ciclu_negativ)
    {
        fout << "Ciclu negativ!";
    }
    else
    {
        for (int i=2; i<=n; ++i)
            fout << d[i] << ' ';
    }
    return 0;
}