Cod sursa(job #2929235)

Utilizator k20ySabaceag Marius k20y Data 25 octombrie 2022 12:21:25
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;

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

const int N=5e4+5;
const int INF=INT_MAX;
#define pp pair<int,int>

vector<pp> la[N];
int frecv[N],dist[N];

bool bford(int start, int n)
{
    for(int i=1;i<=n;i++) dist[i]=INF;
    dist[start]=0;

    queue<int> q;
    q.push(start);

    while(!q.empty())
    {
        int nod=q.front();
        q.pop();

        if(++frecv[nod] == n) return 0;

        for(int i=0;i<la[nod].size();i++)
        {
            pp vecin = la[nod][i];

            if(dist[nod] + vecin.second < dist[vecin.first])
            {
                dist[vecin.first] = dist[nod] + vecin.second;
                q.push(vecin.first);
            }
        }
    }

    return 1;
}
int main()
{
    int n,m; in>>n>>m;

    for(int i=1;i<=m;i++)
    {
        int x,y,c; in>>x>>y>>c;

        la[x].push_back({y,c});
    }

    if(!bford(1,n)) out<<"Ciclu negativ!";
    else
    {
        for(int i=2;i<=n;i++)
            out<<dist[i]<<' ';
    }
}