Cod sursa(job #2565413)

Utilizator radugnnGone Radu Mihnea radugnn Data 2 martie 2020 14:11:22
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>
#define DIM 500010
#define INF 1000000000
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
stack<int> S;
vector<pair<int,int> > L[DIM];
int n,m,a,b,c,i;
int D[DIM],f[DIM],v[DIM];
int main(){
    fin>>n>>m;
    for(i=1;i<=m;i++){
        fin>>a>>b>>c;
        L[a].push_back({b,c});
    }
    S.push(1);
    for(i=2;i<=n;i++)
        D[i]=INF;
    while(!S.empty()){
        int nod=S.top();
        S.pop();
        f[nod]=0;
        for(int i=0;i<L[nod].size();i++){
            int vecin=L[nod][i].first;
            int cost=L[nod][i].second;
            if(D[vecin] > D[nod]+cost){
                D[vecin]=D[nod]+cost;
                //cout<<1;
                if(!f[vecin]){
                    f[vecin]=1;
                    S.push(vecin);
                }
                v[vecin]++;
                if(v[vecin]==n+1){
                    fout<<"Ciclu negativ!";
                    return 0;
                }

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