Cod sursa(job #632701)

Utilizator mihaibogdan10Mihai Bogdan mihaibogdan10 Data 12 noiembrie 2011 03:08:33
Problema Algoritmul Bellman-Ford Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<cstdio>
#include<vector>
#define inf 1<<30
using namespace std;
FILE *in = fopen("bellmanford.in", "r"), *out = fopen("bellmanford.out", "w");

vector <int> arc[50001], cost[50001], dist;
int n, m;

int main(){
	fscanf (in, "%d %d", &n, &m);
	int i, j, x, y, c;
	for (i = 1; i <= m; i++){
		fscanf (in, "%d %d %d", &x, &y, &c);
		arc[x].push_back(y);
		cost[x].push_back(c);
	}
	
	for (i = 0; i <= n; i++) dist.push_back(inf);
	dist[1] = 0;
	
	for (i = 1; i <= n; i++) 
		for (j = 0; j < (int)arc[i].size(); j++)
			if (dist[arc[i][j]] > dist[i] + cost[i][j])
				dist[arc[i][j]] = dist[i] + cost[i][j];
	
	for (i = 1; i <= n; i++) 
		for (j = 0; j < (int)arc[i].size(); j++)
			if (dist[arc[i][j]] > dist[i] + cost[i][j]){
				fprintf(out, "Ciclu negativ!");
				return 0;
			}
	
	for (i = 2; i <=n; i++) fprintf(out, "%d ", dist[i]);
	return 0;
}