Cod sursa(job #2312169)

Utilizator VadimCCurca Vadim VadimC Data 4 ianuarie 2019 13:42:50
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");

#define NMax 50005
#define inf (1 << 30) - 1
#define pii pair<int, int>

int n, m;
vector< pii > G[NMax];
int d[NMax], nr[NMax];

void init();
void rezolvare();

int main(){
	init();
	rezolvare();
}

void init(){
	int i, x, y, c;
	fin >> n >> m;
	for(i = 0; i < n; i++){
		fin >> x >> y >> c;
		G[x].push_back(make_pair(y, c));
	}
	for(i = 2; i <= n; i++) d[i] = inf;
}

void rezolvare(){
	int i, x;
	queue<int> q;
	bool negativ = false;
	q.push(1);
	while(!q.empty() && !negativ){
		x = q.front(); q.pop();
		for(i = 0; i < G[x].size(); i++)
			if(d[G[x][i].first] > d[x] + G[x][i].second){
				d[G[x][i].first] = d[x] + G[x][i].second;
				q.push(G[x][i].first);
				nr[G[x][i].first]++;
				if(nr[G[x][i].first] > n) negativ = true;
			}
	}
	if(negativ) fout << "Ciclu negativ!";
	else
		for(i = 2; i <= n; i++) fout << d[i] << ' ';
}