Cod sursa(job #3193169)

Utilizator Frant_IoanaFrant Ioana Frant_Ioana Data 14 ianuarie 2024 12:28:45
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
#define NMAX 50001
#define INF 1000000001
using namespace std;

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

int n, m, dmin[NMAX], nr[NMAX];
vector<pair<int, int> > g[NMAX];
queue<int> q;
bool negativ;

int main(){

    fin >> n >> m;
    for(int i = 1; i <= m; i++){
        int x, y, c;
        fin >> x >> y >> c;
        g[x].push_back({y, c});
    }

    for(int i = 1; i <= n; i++){
        dmin[i] = INF;
    }

    dmin[1] = 0;
    q.push(1);
    while(!q.empty() && !negativ){
        int vf = q.front();
        q.pop();
        for(auto i : g[vf]){
            if(dmin[i.first] > dmin[vf] + i.second){
                dmin[i.first] = dmin[vf] + i.second;
                nr[i.first]++;
                q.push(i.first);
                if(nr[i.first] > n)
                    negativ = 1;
            }
        }
    }

    if(negativ)
        fout << "Ciclu negativ!";
    else{
        for(int i = 2; i <= n; i++)
            fout << dmin[i] << ' ';
    }
}