Cod sursa(job #3206413)

Utilizator XIIs12sPeteleu Denis Andrei XIIs12s Data 22 februarie 2024 17:47:04
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#define maxi 999999999
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
long long n,m,a,c1,b,t[3][250005],k,start[250005],cost[50005],c[50005],viz[50005],cnt[50005],ok=1;
void ford(int p)
{
    int i,ps=1,pi=1,val,k;
    for(i=1;i<=n;i++)
        cost[i]=maxi;
    cost[p]=0;
    c[pi]=p;
    while(ps<=pi)
    {
        k=c[ps];
        viz[k]=0;
        val=start[k];
        while(val)
        {
            if(cost[k]+t[2][val]<cost[t[0][val]])
            {

                  cost[t[0][val]]=cost[k]+t[2][val];


                  if(!viz[t[0][val]])
                    viz[t[0][val]]=1, c[++pi]=t[0][val];
                  cnt[t[0][val]]++;
                  if(cnt[t[0][val]]>n)
                  {
                        ok=0;
                        break;
                  }
            }
                val=t[1][val];
        }
        ps++;
        if(ok==0)
            break;
    }
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        f>>a>>b>>c1;
        k++;
        t[0][k]=b;
        t[1][k]=start[a];
        t[2][k]=c1;
        start[a]=k;
    }
    ford(1);
    if(ok)
         for(int i=2;i<=n;i++)
       g<<cost[i]<<" ";
    else
     g<<"Ciclu negativ!";


        return 0;
}