Cod sursa(job #2345331)

Utilizator Constantin.Dragancea Constantin Constantin. Data 16 februarie 2019 11:10:07
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second
const int N = 50010;
int n, m, d[N], cnt[N];
vector <pair <int,int> > v[N];
bool u[N];
queue <int> Q;

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    ifstream cin ("bellmanford.in");
    ofstream cout ("bellmanford.out");
    cin >> n >> m;
    for (int i=1, x, y, z; i<=m; i++){
        cin >> x >> y >> z;
        v[x].push_back({y, z});
    }
    for (int i=2; i<=n; i++) d[i] = (1<<30);
    Q.push(1);
    while (!Q.empty()){
        int nod = Q.front();
        Q.pop();
        u[nod] = 0;
        for (auto it: v[nod]){
            if (d[nod] + it.se < d[it.fi]){
                d[it.fi] = d[nod] + it.se;
                if (u[it.fi]) continue;
                if (cnt[it.fi] >= n) return cout << "Ciclu negativ!\n", 0;
                Q.push(it.fi);
                u[it.fi] = 1;
                cnt[it.fi]++;
            }
        }
    }
    for (int i=2; i<=n; i++) cout << d[i] << " ";
    return 0;
}