Cod sursa(job #2537939)

Utilizator BogdanGhGhinea Bogdan BogdanGh Data 4 februarie 2020 09:57:03
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
vector <pair<int,int>>v[50005];
queue <int>Q;
bool OnQueue[50005];
int n,m,i,j,x,y,c,fr[50005];
long long d[50005];
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
        d[i]=999999999999999;
    for(i=1; i<=m; i++)
    {
        f>>x>>y>>c;
        v[x].push_back({y,c});
    }
    OnQueue[1]=1;
    Q.push(1);
    d[1]=0;
    while(!Q.empty())
    {
        x=Q.front();
        fr[x]++;
        if(fr[x]==n){
           return g<<"Ciclu negativ!",0;
        }
        for(auto i:v[x])
            if(d[x]+i.second<d[i.first])
            {
                d[i.first]=d[x]+i.second;
                if(!OnQueue[i.first])
                {
                    OnQueue[i.first]=1;
                    Q.push(i.first);
                }
            }
        OnQueue[x]=0;
        Q.pop();
    }
    for(i=2;i<=n;i++)
        g<<d[i]<<' ';
    return 0;
}