Cod sursa(job #2972558)

Utilizator Glue02Tudorescu Ioan Daniel Glue02 Data 29 ianuarie 2023 18:28:46
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <queue>
#include <vector>

#define INF 0x3f3f3f3f
using namespace std;

ifstream cin("bellmanford.in");
ofstream cout("bellmanford.out");
queue <int> q;
vector <int> G[50001],C[50001];
int ciclu[50001];
int d[50001],n,m,x,y,c,p,i;
int bellmanfors(int start)
{
    for(int i=1;i<=n;i++)
        d[i] = INF;
    d[start] =0;
    q.push(start);
    while(!q.empty())
    {
        x = q.front();
        ciclu[x]++;
        if(ciclu[x] > n){
            return -1;
        }
        for(i = 0; i<G[x].size();++i)
        {
            if(d[G[x][i]] > d[x] + C[x][i])
            {
                d[G[x][i]] = d[x] + C[x][i];
                q.push(G[x][i]);
            }
        }
        q.pop();
    }
    return 1;
}
int main()
{
    cin>>n>>m;
    while(m--)
    {
        cin>>x>>y>>c;
        G[x].push_back(y);
        C[x].push_back(c);
    }
    int c = bellmanfors(1);
    if(c>0)
        for(int i=2;i<=n;i++)
            cout<<d[i]<<' ';
    else cout<<"Ciclu negativ!";
    return 0;
}