Cod sursa(job #2758742)

Utilizator mitocaru_marioMitocaru Mario-Alexandru mitocaru_mario Data 12 iunie 2021 12:45:54
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N = 50002;
const int INF = 1000000002;
vector <pair <int,int> > v[N];
int n,m,d[N],cnt[N];
queue <int>  q;
bitset <N> viz;
int main()
{
    f>>n>>m;
    for(;m;m--)
    {
        int x,y,z;
        f>>x>>y>>z;
        v[x].push_back(make_pair(y,z));
    }
    for(int i=1;i<=n;i++)
        d[i]=INF;
    d[1]=0;
    q.push(1);
    viz[1]=1;
    while(q.size())
    {
        int nod;
        nod=q.front();
        q.pop();
        viz[nod]=0;
        for(auto it:v[nod])
        {
            int vec,cst;
            tie(vec,cst)=it;
            if(d[nod]+cst<d[vec])
            {
                cnt[vec]++;
                if(cnt[vec]==n)
                {
                    g<<"Ciclu negativ!";
                    return 0;
                }
                d[vec]=d[nod]+cst;
                if(!viz[vec])
                {
                    q.push(vec);
                    viz[vec]=1;
                }
            }
        }
    }
    for(int i=2;i<=n;i++)
        {
            if(d[i]==INF)
                d[i]=0;
            g<<d[i]<<' ';
        }
    return 0;
}