Cod sursa(job #2626645)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 7 iunie 2020 12:46:39
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
const int NMAX = 50005;
const int INF = (1<<29);
int n,m,d[NMAX],x,y,cost,cnt[NMAX];
bool in_q[NMAX];
vector < pair<int,int> > v[NMAX];
queue < pair<int,int> > q;
int main()
{
    fin >> n >> m;
    for(int i=0;i<=n+1;i++) d[i]=INF;
    d[1]=0;
    for(int i=1;i<=m;i++){
        fin >> x >> y >> cost;
        v[x].push_back(make_pair(y,cost));
    }
    q.push({1,0});
    while(!q.empty()){
        pair<int,int> aux=q.front();
        int nod=aux.first;
        in_q[nod]=false;
        q.pop();
        for(int i=0;i<v[nod].size();i++){
            int vecin=v[nod][i].first,cost=v[nod][i].second;
            if(d[vecin]>d[nod]+cost){
                d[vecin]=d[nod]+cost;
                cnt[nod]++;
                if(cnt[nod]==n){
                    fout << "Ciclu negativ!";
                    return 0;
                }
                if(!in_q[vecin]){
                    q.push({vecin,d[vecin]});
                    in_q[vecin]=true;
                }
            }
        }
    }
    for(int i=2;i<=n;i++) fout << d[i] << ' ';
    return 0;
}