Cod sursa(job #1015712)

Utilizator MarghescuGabriel Marghescu Marghescu Data 25 octombrie 2013 00:06:36
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#define maxn 50010
#define maxm 250010
#define inf 1000000000
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
long n,m,i,j,k,cost[maxn];
struct muchie
{
    long a;
    long b;
    long c;

}v[maxm];

void read()
{
    f>>n>>m;
    for (long i=1; i<=m; i++)
        f>>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 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 (negativ ())
    {
        g<<"Ciclu negativ!\n";
        return 0;
    }
    for (long i=2; i<=n; i++)
        g<<cost[i]<<" ";

    f.close ();
    g.close ();
    return 0;

}