Cod sursa(job #1737906)

Utilizator delia_99Delia Draghici delia_99 Data 5 august 2016 11:46:53
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <cstdio>
#include <vector>
#include <queue>
#define NMAX 50000
#define inf 2000000000
using namespace std;

int n,m,i,crt,node,val;
int cost[NMAX+5],nr[NMAX+5];
bool ok[NMAX+5];
vector <pair <int,int> > G[NMAX+5];
queue <int> q;

bool aww()
{
    for(i=2; i<=n; ++i)
        cost[i]=inf;
    q.push(1);
    while(!q.empty())
    {
        crt=q.front();
        ok[crt]=false;
        q.pop();
        int s=G[crt].size();
        for(i=0; i<s; ++i)
        {
            node=G[crt][i].first;
            val=G[crt][i].second;
            if(cost[crt]+val<cost[node])
            {
                if(nr[node]==n-1)
                    return false;
                ++nr[node];
                cost[node]=cost[crt]+val;
                if(!ok[node])
                {
                    q.push(node);
                    ok[node]=true;
                }
            }
        }
    }
    return true;
}

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

    scanf("%d%d",&n,&m);
    for(i=1; i<=m; ++i)
    {
        int x,y,c;
        scanf("%d%d%d",&x,&y,&c);
        G[x].push_back(make_pair(y,c));
    }

    if(aww())
        for(i=2; i<=n; ++i)
            printf("%d ",cost[i]);
    else printf("Ciclu negativ!");

    return 0;
}