Cod sursa(job #640035)

Utilizator R.A.RFMI Romila Remus Arthur R.A.R Data 24 noiembrie 2011 17:19:23
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <queue>
#include <vector>
#define NMAX 50002
#define oo (1<<30)

using namespace std;

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

vector<pair<int,int> > V[NMAX];
vector<pair<int,int> >::iterator it,sf;
queue<int> Q;
int D[NMAX],App[NMAX],N,M;

int main()
{
    int x,y,c;
    in>>N>>M;
    while(M--)
    {
        in>>x>>y>>c;
        V[x].push_back(make_pair(y,c));
    }
    fill(D+2,D+N+1,oo);
    for(Q.push(1);!Q.empty();Q.pop())
    {
        x = Q.front();
        App[x]++;
        if(App[x]>N)
        {
            out<<"Ciclu negativ!\n";
            return 0;
        }

        for(it=V[x].begin(),sf=V[x].end();it<sf;++it)
        {
            y = it->first;
            c = it->second;
            if(D[y]>D[x]+c)
            {
                D[y] = D[x]+c;
                Q.push(y);
            }
        }
    }

    for(x=2;x<=N;x++)
        out<<(D[x]==oo?0:D[x])<<' ';
    return 0;
}