Cod sursa(job #3290453)

Utilizator Cristian_NegoitaCristian Negoita Cristian_Negoita Data 30 martie 2025 19:01:33
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
#define int long long
const int NMAX = 50001, INF = 1e18;
vector<pair<int, int>> vec[NMAX];
int n, m, dist[NMAX], vis[NMAX];

void bellman(int start)
{
    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();
        for(pair<int, int> p : vec[nod])
        {
            if(dist[p.first] > dist[nod] + p.second)
            {
                dist[p.first] = dist[nod] + p.second;
                vis[p.first]++;
                if(vis[p.first] > n - 1)
                {
                    fout << "Ciclu negativ!";
                    return;
                }
                q.push(p.first);
            }
        }
    }
}

signed main()
{
    fin >> n >> m;
    while(m--)
    {
        int i, j, g;
        fin >> i >> j >> g;
        vec[i].push_back({j, g});
    }
    bellman(1);
    for(int i = 2; i <= n; i++)
        fout << (dist[i] == INF ? 0 : dist[i]) << ' ';

    return 0;
}