Cod sursa(job #1729393)

Utilizator dragomirmanuelDragomir Manuel dragomirmanuel Data 14 iulie 2016 17:20:33
Problema Algoritmul Bellman-Ford Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <bitset>
#define inf 10000000

using namespace std;

int n,m,c,dist[50015],viz[50015];

vector <pair <int ,int > > v[50015];

queue < pair <int, int > > q;

void read()
{    int x,y,c;
    scanf("%d%d",&n,&m);

     for (int i=2;i<=n;++i)
        dist[i]=inf;

    q.push(make_pair(0,1));

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

}

void bell()
{
    while(!q.empty())
   { int y=q.front().second;
    int c=q.front().first;
    q.pop();

for(vector <pair<int ,int > > :: iterator it=v[y].begin();it!=v[y].end();++it)
    {
        if(c+it->second < dist[it->first])
        {
            dist[it->first]=c+it->second;
            q.push(make_pair(dist[it->first],it->first));
            viz[it->first]++;
            if(viz[it->first]==n)
            {
                printf("Ciclu negativ!");
                return;
            }
        }
    }
}
        for (int i=2; i<=n; ++i)
            printf("%d ",dist[i]);
}


int main()
{
    freopen("bellmanford.in","r",stdin);
    freopen("bellmanford.out","w",stdout);
    read();
    bell();
    return 0;
}