Cod sursa(job #938205)

Utilizator OpportunityVlad Negura Opportunity Data 12 aprilie 2013 00:39:37
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <vector>
using namespace std;

#define dim 250001

ifstream fi("bellmanford.in");
ofstream fo("bellmanford.out");

vector< pair <int,int> > G[dim];
vector< int > Q;

int d[dim],in[dim],a[dim],i,n,m,x,y,c;

int main(){
	
	fi >> n >> m;
	for (i=1; i<=m; i++){
		fi >> x >> y >> c;
		G[x].push_back(make_pair(y,c));
	}
	for (i=2; i<=n; i++) d[i]=0x3f3f3f3f;
	
	Q.push_back(1);
	
	while (!Q.empty()){
		int nod=Q.back();
		Q.pop_back();
		in[nod]=0;
		for (vector< pair < int,int> >::iterator it=G[nod].begin(); it!=G[nod].end(); it++){
			if (d[it->first]>d[nod]+it->second){
				d[it->first]=d[nod]+it->second;
				if (!in[it->first]) {
					Q.push_back(it->first);
				}
				if (++a[it->first]==n){
					fo << "Ciclu negativ!";
					return 0;
				}
			}
		}
	}
	
	for (i=2; i<=n; i++) fo << d[i] << " ";
	
	return 0; 
}