Cod sursa(job #3216225)

Utilizator AnghelutaDiana06Angheluta Diana AnghelutaDiana06 Data 15 martie 2024 18:37:18
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
#define N 50005
#define oo 1e9
int n,p,x,y,z;
vector<pair<int,int>> G[N];
bitset<N> viz;
int f[N];
queue<int> q;
int D[N];

void Citire(){
    fin>>n>>p;
    while(fin>>x>>y>>z){
        G[x].push_back(make_pair(y,z));
    }
}

bool BellmanFord(int x){
    for(int i=1;i<=n;i++){
        D[i]=oo;
    }
    viz[x]=1;
    D[x]=0;
    q.push(x);
    while(!q.empty()){
        int k=q.front();
        f[k]++;
        if(f[k]>=n) return false;
        q.pop();
        viz[k]=0;
        for(auto it=G[k].begin();it!=G[k].end();it++){
            int vecin=(*it).first;
            int cost=(*it).second;
            if(D[k]+cost<D[vecin]){
                D[vecin]=D[k]+cost;
                if(viz[vecin]==0){
                    viz[vecin]=1;
                    q.push(vecin);
                }
            }
        }
    }
    return true;
}

int main(){
    Citire();
    if(BellmanFord(1)==false) fout<<"Ciclu negativ!";
    else{
        for(int i=2;i<=n;i++){
            if(D[i]!=oo) fout<<D[i]<<' ';
            else fout<<-1<<' ';
        }
    }
    return 0;
}