Cod sursa(job #899949)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 28 februarie 2013 17:02:29
Problema Algoritmul Bellman-Ford Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <stdio.h>
#include <vector>
#define INF 0x3f3f3f3f

using namespace std;

long n, m, a, b, c, i, j, d[50010];
vector < long > G[50010], C[50010];

int main() {
	freopen("bellmanford.in", "r", stdin);
	freopen("bellmanford.out", "w", stdout);
	
	scanf("%ld %ld", &n, &m);
	for (i = 1; i <= m; ++i) {
		scanf("%ld %ld %ld", &a, &b, &c);
		G[a].push_back(b);
		C[a].push_back(c);
	}
	
	fill(d + 1, d + n + 1, INF);
	d[1] = 0;
	
	for (i = 1; i <= n; ++i)
		for (j = 0; j < G[i].size(); ++j) 
			d[i]+C[i][j]<d[G[i][j]]?d[G[i][j]]=d[i]+C[i][j]:i;
	
	for (i = 1; i <= n; ++i)
		for (j = 0; j < G[i].size(); ++j) 
			if (d[i] + C[i][j] < d[G[i][j]]) {printf("Ciclu negativ!"); return 0;}

	for (i = 2; i <= n; ++i) printf("%ld ", d[i]);
	return 0;
}