Cod sursa(job #2304326)

Utilizator Gl0WCula Stefan Gl0W Data 17 decembrie 2018 21:48:42
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <queue>
#include <vector>

#define INF 1000000000

using namespace std;

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

vector < pair < int, int > > v[50010];
queue < int > coada;
int hz[50010], distante[50010], viz[50010], n, m, x, y, z;

int main()
{
    fin>>n>>m;
    for(int i = 1; i <= m; i++){
        fin>>x>>y>>z;
        v[x].push_back(make_pair(y, z));
    }
    coada.push(1);
    hz[1] = 1;
    distante[1] = 0;
    for(int i = 2; i <= n; i++){
        distante[i] = INF;
    }
    while(!coada.empty()){
        x = coada.front();
        coada.pop();
        hz[x] = 0;
        for(int i = 0; i < v[x].size(); i++){
            y = v[x][i].first;
            if(distante[y] > distante[x] + v[x][i].second){
                distante[y] = distante[x] + v[x][i].second;
                if(hz[y] == 0){
                    viz[y]++;
                    if(viz[y] == n){
                        fout<<"Ciclu negativ!";
                        return 0;
                    }
                    coada.push(y);
                    hz[y] = 1;
                }
            }
        }
    }
    for(int i = 2 ; i <= n; i++){
        fout<<distante[i]<<" ";
    }
    return 0;
}