Cod sursa(job #1013585)

Utilizator pulseOvidiu Giorgi pulse Data 21 octombrie 2013 11:32:42
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<fstream>
#define maxn 50010
#define maxm 250010
#define inf 1000000000

using namespace std;

ifstream fin("bellmanford.in"); ofstream fout("bellmanford.out");

struct muchie
{
    long a;
    long b;
    long c;
}v[maxm];

long n,m,i,j,k,cost[maxn];

void read()
{
    fin>>n>>m;
    for (long i=1; i<=m; i++)
        fin>>v[i].a>>v[i].b>>v[i].c;
    for (long i=2; i<=n; i++)
        cost[i]=inf;
    cost[1]=0;
}

void solve()
{
    for(long i=1; i<=n; i++)
        for(long j=1; j<=m; j++)
            if(cost[v[j].a]+v[j].c<cost[v[j].b])
                cost[v[j].b]=cost[v[j].a]+v[j].c;
}

long check_negativ()
{
    for(long i=1; i<=m; i++)
        if(cost[v[i].a]+v[i].c<cost[v[i].b])
            return 1;
    return 0;
}

int main ()
{
    read ();
    solve ();
    if (check_negativ ())
    {
        fout<<"Ciclu negativ!\n";
        return 0;
    }
    for (long i=2; i<=n; i++)
        fout<<cost[i]<<" ";

    fin.close (); fout.close ();
    return 0;

}