Cod sursa(job #1115967)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 22 februarie 2014 11:34:10
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <vector>
#include <queue>
#define INF 1008099002
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int n,m,D[50011],U[50011];
bool viz[50011];
vector<pair<int,int> > L[50011];
vector<pair<int,int> >::iterator it;
queue<int> q;

int main(void){
    register int i,j,x,c,y;
    pair<int,int> p;

    f>>n>>m;
    for(i=1;i<=m;i++){
        f>>x>>y>>c;
        L[x].push_back(make_pair(y,c));
    }
    for(i=2;i<=n;i++) D[i]=INF;

    q.push(1); viz[1]=1;
    int ng=0;
    while(!q.empty() && !ng){
        x=q.front(); q.pop(); viz[x]=0;
        for(it=L[x].begin();it!=L[x].end();it++){
            p=*it;
            if(D[p.first]>D[x]+p.second){
                U[p.first]++;
                if(U[p.first]==n){
                    ng=1;  break;
                }
                D[p.first]=D[x]+p.second;
                if(!viz[p.first])
                    q.push(p.first),viz[p.first]=true;
            }
        }
    }

    if(ng)
        g<<"Ciclu negativ!\n";
    else
        for(i=2;i<=n;i++)
            g<<D[i]<<" ";
    f.close();
    g.close();
    return 0;
}