Cod sursa(job #2304995)

Utilizator radugheoRadu Mihai Gheorghe radugheo Data 18 decembrie 2018 22:20:51
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>
#define DIM 50005

using namespace std;

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

int n, m, i, x, y, c, nod, vecin;
int d[DIM], f2[DIM], f1[DIM];

vector < pair <int, int> > L[DIM];
queue <int> q;

int main(){
    fin >> n >> m;
    for (i=1; i<=m; i++){
        fin >> x >> y >> c;
        L[x].push_back ({y, c});
    }
    d[1] = 0;
    for (i=2; i<=n; i++)
        d[i] = INT_MAX;
    q.push (1);
    f1[1] = 1;
    while (!q.empty()){
        nod = q.front ();
        q.pop ();
        f1[nod] = 0;
        for (i=0; i<L[nod].size(); i++){
            vecin = L[nod][i].first;
            if (d[vecin] > d[nod] + L[nod][i].second){
                d[vecin] = d[nod] + L[nod][i].second;
                f2[vecin]++;
                if (f2[vecin] == n){
                    fout << "Ciclu negativ!";
                    return 0;
                }
                if (f1[vecin] == 0){
                    q.push (vecin);
                    f1[vecin] = 1;
                }
            }
        }
    }
    for (i=2; i<=n; i++)
        fout << d[i] << " ";
    return 0;
}