Cod sursa(job #674259)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 5 februarie 2012 22:16:57
Problema Algoritmul Bellman-Ford Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<vector>
#include<deque>
#define Nmax 50009
#define pb push_back
#define mp make_pair
#define inf 0x3f3f3f
#define nod first
#define cost second

using namespace std;

vector<pair<int,int> > a[Nmax];
vector<pair<int,int> >::iterator it;
deque<int> Q;
int n,m,i,x,y,c,D[Nmax];

int main()
{
    freopen("bellmanford.in","r",stdin);
    freopen("bellmanford.out","w",stdout);

    scanf("%d%d",&n,&m);
    for (i=1;i<=m;i++)
    {
        scanf("%d%d%d",&x,&y,&c);
        a[x].pb(mp(y,c));
    }
    memset(D,inf,sizeof(D));
    D[1]=0;
    Q.pb(1);

    while (!Q.empty())
    {
        x=Q.front();
        for (it=a[x].begin();it!=a[x].end();it++)
            if (D[x]+(*it).cost<D[(*it).nod])
            {
                if (D[(*it).nod]<0)
                {
                    printf("Ciclu negativ!\n");
                    return 0;
                }
                D[(*it).nod]=D[x]+(*it).cost;
                Q.pb((*it).nod);
            }
        Q.pop_front();
    }
    for (i=2;i<=n;i++)
        printf("%d ",D[i]);
}