Cod sursa(job #2459159)

Utilizator anamariatoaderAna Toader anamariatoader Data 22 septembrie 2019 11:26:31
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <vector>
#include <climits>
#include <queue>

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

int n,m,i,x,y,c,nr[50005],d[50005];
bool viz[50005];
struct arc{
    int v,c;
};
vector <arc> g[50005];
queue <int> q;

int main(){
    fin>>n>>m;
    for(i=1;i<=n;i++){
        fin>>x>>y>>c;
        g[x].push_back({y,c});
    }
    for(i=2;i<=n;i++)
        d[i]=INT_MAX;
    q.push(1);
    viz[1]=1;
    nr[1]=1;
    while(!q.empty()){
        int nod=q.front();
        q.pop();
        viz[nod]=0;
        for(i=0;i<g[nod].size();i++){
            int nou=g[nod][i].v;
            int cost=g[nod][i].c;
            if(d[nou]>d[nod]+cost){
                d[nou]=d[nod]+cost;
                nr[nou]++;
                if(nr[nou]==n){
                    fout<<"Ciclu negativ!"<<'\n';
                    return 0;
                }
             if(!viz[nou]){
                q.push(nou);
                viz[nou]=1;
            }
            }

        }
    }
    for(i=2;i<=n;i++)
        fout<<d[i]<<' ';
    return 0;
}