Cod sursa(job #2959776)

Utilizator Zed1YasuoAlex Birsan Zed1Yasuo Data 2 ianuarie 2023 17:34:18
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int n,m,fr[50001],b[50001],dist[50001];
queue<int>q;
bool ver[50001];
vector<pair<int,int>>a[50001];
void bf()
{
    q.push(1);
    dist[1]=0;
    b[1]=1;
    while(!q.empty())
    {
        int nod=q.front();
        q.pop();
        if(fr[nod]==n+1)
        {
            g<<"Ciclu negativ!";
            exit(0);
        }
        b[nod]=0;
        for (auto it: a[nod])
        {
            int vec=it.first;
            int d=it.second;
            if(dist[vec]>dist[nod]+d)
            {

                dist[vec]=dist[nod]+d;
            if(b[vec]==0)
            {
                b[vec]=1;
                q.push(vec);
                fr[vec]++;
            }
            }
        }
    }
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int X,Y,Z;
        f>>X>>Y>>Z;
        a[X].push_back({Y,Z});
    }
    for(int i=1;i<=n;i++)
        dist[i]=1e9;
    bf();
    for(int i=2;i<=n;i++)
        if(dist[i]!=1e9)
            g<<dist[i]<<" ";
        else
            g<<-1<<" ";
    return 0;
}