Cod sursa(job #2836808)

Utilizator Alle43221Moroz Alexandra-Ioana Alle43221 Data 20 ianuarie 2022 22:07:48
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.79 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

#define inf 2000000001

using namespace std;

ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");

struct Muchie
{
    int y, cost;
} aux;

int n, m, cate=0, x;
int D[50001];
bool vf[50001], ok=true, vff[50001];
vector <Muchie> C[50001];

void relaxare(int x, bool vf[50001])
{
    for(auto i: C[x])
    {
        if(D[x]+i.cost<D[i.y])
        {
            D[i.y]=D[x]+i.cost;
            vf[i.y]=1;
        }
    }
}

int main()
{
    fin>>n>>m;

    /*
    for(int i=2; i<=n; i++)
    {
        D[i]=inf;
    }
    */
    for(int i=0; i<m; i++)
    {
        fin>>x>>aux.y>>aux.cost;
        C[x].push_back(aux);
        if(x==1)
        {
            D[aux.y]=aux.cost;
        }
        else
        {
            D[i]=inf;
        }
    }

    relaxare(1, vf);
    for(int i=0; i<n-2; i++)
    {
        if(i%2==1)
        {
            for(int i=1; i<n; i++)
            {
                if(vf[i])
                {
                    relaxare(i, vff);
                    vf[i]=0;
                }
            }
        }
        else
        {
            for(int i=1; i<n; i++)
            {
                if(vff[i])
                {
                    relaxare(i, vf);
                    vff[i]=0;
                }
            }
        }

    }
    /*
    for(auto i: C[1])
    {
        if(D[1]+i.cost<D[i.y])
        {
            D[i.y]=D[1]+i.cost;
            ok=false;
        }
    }
    */

    if(!ok)
    {
        fout<<"Ciclu negativ!";
    }
    else
    {
        for(int i=2; i<=n; i++)
        {
            fout<<D[i]<<' ';
        }
    }

    fin.close();
    fout.close();
    return 0;
}