Cod sursa(job #632695)

Utilizator the_snyper06FMI - ALexandru Mihai the_snyper06 Data 12 noiembrie 2011 01:55:26
Problema Algoritmul Bellman-Ford Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<cstdio>
#include<vector>
#define inf 1005

using namespace std;

struct Nod {
	int key, cost;
};

vector <Nod> L[50001], st;
int dmin[50001];
int n, m;

int main() {
	int i, j, x, y, c;
	
	freopen("bellmanford.in", "r", stdin), freopen("bellmanford.out", "w", stdout);
	scanf("%d %d", &n, &m);
	
	for(i = 1; i <= m; i++) {
		scanf("%d %d %d", &x, &y, &c);
		L[x].push_back((Nod){y, c});
	}
	
	dmin[1] = 0;
	for(i = 2; i <= n; i++) dmin[i] = inf;
	
	st.push_back((Nod){1, 0});
	while(st.size() > 0) {
		i = st[st.size() - 1].key;
		st.pop_back();
		
		for(j = 0; j < (int)L[i].size(); j++) {
			x = L[i][j].key;
			c = L[i][j].cost;
			if(dmin[x] > dmin[i] + c) {
				dmin[x] = dmin[i] + c;
				st.push_back((Nod){x, dmin[x]});
			}
		}
	}
	
	// verific daca exista un ciclu negativ
	for(i = 1; i <= n; i++) {
		for(j = 0; j < (int)L[i].size(); j++) {
			x = L[i][j].key, c = L[i][j].cost;
			
			if(dmin[x] > dmin[i] + c) {
				printf("Ciclu negativ!\n");
				return 0;
			}
		}		
	}
	
	for(i = 2; i <= n; i++) printf("%d ", dmin[i]);
	
	return 0;
}