Cod sursa(job #1146987)

Utilizator alex_bucevschiBucevschi Alexandru alex_bucevschi Data 19 martie 2014 14:45:21
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>
#include <vector>
#include <utility>
#include <deque>
#define N 50010
using namespace std;
int n,m,nod,ve,co,i,q[N],cst[N],cnt[N],oo=250010*1010;
vector<pair<int,int> > V[N];
deque<int> Q;
int main()
{
    freopen("bellmanford.in","r",stdin);
    freopen("bellmanford.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(;m;m--)
    {
        scanf("%d%d%d",&nod,&ve,&co);
        V[nod].push_back(make_pair(ve,co));
    }
    for(i=2;i<=n;i++)cst[i]=oo;
    q[1]=1;Q.push_back(1);
    for(;Q.size();)
    {
        nod=Q.front();
        co=cst[nod];
        for(vector<pair<int,int> >::iterator it=V[nod].begin();it!=V[nod].end();it++)
        if(cst[it->first]>co+it->second)
        {
            cst[it->first]=co+it->second;
            if(!q[it->first])
            {
                cnt[it->first]++;
                if(cnt[it->first]>n)
                {
                    printf("Ciclu negativ!");
                    return 0;
                }
                q[it->first]=1;
                Q.push_back(it->first);
            }

        }
        Q.pop_front();
    }
    for(i=2;i<n;i++)
        printf("%d ",cst[i]);
    printf("%d\n",cst[i]);
    return 0;
}