Cod sursa(job #2300419)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 11 decembrie 2018 12:18:46
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
#define nod first
#define cost second
#define INF 2000000000
using namespace std;
vector <pair <int,int>> G[50001];
int mindist[50001],viz[50001],f[50001];
queue <int> q;
int main()
{
    int n,m,a,b,c,i;
    freopen("bellmanford.in","r",stdin);
    freopen("bellmanford.out","w",stdout);
    scanf("%d%d",&n,&m);
    while(m--)
    {
        scanf("%d%d%d",&a,&b,&c);
        G[a].push_back({b,c});
    }
    for(i=2; i<=n; i++)
        mindist[i]=INF;
    q.push(1);
    viz[1]=1;
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        viz[u]=0;
        for(auto w : G[u])
            if(mindist[u]+w.cost<mindist[w.nod])
            {
                mindist[w.nod]=mindist[u]+w.cost;
                if(!viz[w.nod])
                {
                    viz[w.nod]=1;
                    q.push(w.nod);
                    f[w.nod]++;
                }
                if(f[w.nod]==n)
                {
                    printf("Ciclu negativ!");
                    exit(0);
                }
            }
    }
    for(i=2; i<=n; i++)
        printf("%d ",mindist[i]);

    return 0;
}