Cod sursa(job #3182930)

Utilizator Radu_MocanasuMocanasu Radu Radu_Mocanasu Data 10 decembrie 2023 12:05:01
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#pragma GCC optimize("Ofast,inline,unroll-loops")
#include <bits/stdc++.h>

using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
struct edge{
    int u,v,c;
    edge(int _u, int _v, int _c){
        u = _u;
        v = _v;
        c = _c;
    }
};
int d[50005];
int cnt[50005];
int n;
bool cn;
vector < pair <int, int> > G[50005];
queue <int> q;
bool inqueue[50005];
bool bellman_ford(){
    d[1] = 0;
    q.push(1);
    inqueue[1] = 1;
    while(!q.empty()){
        for(auto x : G[q.front()]){
            if(d[q.front()] + x.second < d[x.first]){
                d[x.first] = d[q.front()] + x.second;
                if(!inqueue[x.first]){
                    q.push(x.first);
                    inqueue[x.first] = 1;
                    cnt[x.first]++;
                    if(cnt[x.first] > n) return 0;
                }
            }
        }
        inqueue[q.front()] = 0;
        q.pop();
    }
    return 1;
}
int main()
{
    int m,i,u,v,c;
    fin >> n >> m;
    memset(d,0x3f,sizeof d);
    for(i = 1; i <= m; i++){
        fin >> u >> v >> c;
        G[u].push_back({v,c});
    }
    if(!bellman_ford()){
        fout << "Ciclu negativ!";
        return 0;
    }
    for(i = 2; i <= n; i++) fout << d[i] << " ";
    return 0;
}