Cod sursa(job #2739613)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 8 aprilie 2021 23:18:57
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include<bits/stdc++.h>

using namespace std;

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

vector<pair<int,int>> G[50005];
queue<int> Q;
int val[50005], selectat[50005], updated[50005];

int main(){ //varianta optimizata
    int n,m,i,j,a,b,cost,top,nod;
    fin>>n>>m;
    for(i = 1; i <= m; i++){
        fin>>a>>b>>cost;
        G[a].push_back(make_pair(b,cost));
    }
    for(i = 1; i <= n; i++){
        val[i] = 51234567;
    }
    val[1] = 0;
    Q.push(1);
    selectat[1] = 1;
    while(!Q.empty()){
        top = Q.front();
        Q.pop();
        selectat[top] = 0;
        for(auto vecin: G[top]){
            nod = vecin.first;
            if(val[nod] > val[top] + vecin.second){
                val[nod] = val[top] + vecin.second;
                updated[nod]++;
                if(!selectat[nod]){
                    Q.push(nod);
                    selectat[nod] = 1;
                }
            }
            if(updated[nod] == n){
                fout<<"Ciclu negativ!";
                return 0;
            }
        }
    }
    for(i = 2; i <= n; i++){
        fout<<val[i]<<' ';
    }
	return 0;
}