Cod sursa(job #3306997)

Utilizator vlad7654vladimir manescu vlad7654 Data 16 august 2025 12:09:51
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
const int NMAX=5e4, inf=1e9;
vector<pair<int,int> > mat[NMAX+5];
vector<int> dist(NMAX+5, inf);
vector<int>cnt(NMAX+5,0);
queue<int> q;
vector<bool> inqueue(NMAX+5);
int n, m;
bool spfa(){
    dist[1]=0;
    q.push(1);
    inqueue[1]=1;
    while(!q.empty()){
        int nod=q.front();
        q.pop();
        inqueue[nod]=0;
        for(auto it:mat[nod]){
            int nod1=it.first, cost1=it.second;
            if(dist[nod1]>dist[nod]+cost1){
                dist[nod1]=dist[nod]+cost1;
                if(inqueue[nod1]==0){
                    q.push(nod1);
                    inqueue[nod1]=1;
                    cnt[nod1]++;
                    if(cnt[nod1]>n){
                        return 0;
                    }
                }
            }
        }
    }
    return 1;
}
int main(){
    fin>>n>>m;
    for(int i=1;i<=m;i++){
        int x, y, z;
        fin>>x>>y>>z;
        mat[x].push_back({y,z});
    }
    bool ans=spfa();
    if(ans){
        for(int i=2;i<=n;i++){
            fout<<dist[i]<<' ';
        }
    }else{
        fout<<"Ciclu negativ!";
    }
}