Cod sursa(job #2225664)

Utilizator AlexandruPaulSirbu Alex AlexandruPaul Data 27 iulie 2018 21:07:01
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
const int Maxx=5e4+1;
const int INF=1<<31;
const int Maxxx=25e4+1;
struct NODE {
    int node,cost;
};
vector <NODE> A[Maxx];
queue <int> Q;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int n,m;
int nod,pret,x,y;
int ans[Maxx];
int ciclu[Maxxx];
void afis(bool n);
int main() {
    fin>>n>>m;++m;
    for (int i=1;i<=n;++i) ans[i]=INF;
    for (;--m;){
        fin>>x>>y>>pret;
        A[x].push_back({y,pret});
    }
    Q.push(1);
    ans[1]=0;
    while (!Q.empty()){
        nod=Q.front();
        Q.pop();
        for (int i=0;i<A[nod].size();++i){
            if (ans[A[nod][i].node]>ans[nod]+A[nod][i].cost){
                ans[A[nod][i].node]=ans[nod]+A[nod][i].cost;
                Q.push(A[nod][i].node);
                ++ciclu[A[nod][i].node];
                if (ciclu[A[nod][i].node]>n) {
                        fout<<"Ciclu negativ!";
                        return 0;
                }
            }
        }
    }
    for (int i=2;i<=n;++i)
        fout<<ans[i]<<" ";
    return 0;
}