Cod sursa(job #2619223)

Utilizator pro119Manea Dumitru pro119 Data 27 mai 2020 12:05:34
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>
using namespace std;

const int mxN=500100;
int n,m,a,b,c,dist[mxN],cnt[mxN],aux=0;
vector < pair<int,int> > g[mxN];
void BF (int start){
    queue <int> q;
    q.push(start);
    dist[start]=0;
    while(!q.empty()){
        int em=q.front();
        q.pop();
        for (int i=0; i<g[em].size(); i++){
            int node = g[em][i].first;
            int len = g[em][i].second;
            if (dist[em]+len<dist[node]){
                if (cnt[node]==n) {
                    aux=1;
                    return;
                }
                dist[node]=dist[em]+len;
                cnt[node]++;
                q.push(node);
            }
        }
    }
}
int main()
{
    //ifstream cin("bellmanford.in");
    //ofstream cout("bellmanford.out");
    ios_base::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for (int i=0; i<m; i++){
        cin>>a>>b>>c;
        g[a].push_back({b,c});
    }
    fill(dist,dist+mxN,INT_MAX);
    BF(1);
    if (!aux)
        for (int i=2; i<=n; i++)
            cout<<dist[i]<<" ";
    else cout<<"Ciclu negativ!";
    return 0;
}