Cod sursa(job #2237739)

Utilizator gabrielxCojocaru Gabriel-Codrin gabrielx Data 2 septembrie 2018 21:39:00
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <unordered_map>
#include <queue>
#include <deque>
#include <cmath>
#include <algorithm>
#define INF 1e17

using namespace std;

ifstream cin("bellmanford.in");
ofstream cout("bellmanford.out");

int n, m;
vector<pair<pair<int, int>, int>> edges;

void bellmanford() {
	vector<long long> distances(n + 1);
	fill(distances.begin(), distances.end(), INF);

	distances[1] = 0;

	for (int i = 0; i < n - 1; ++i) {
		for (auto edge : edges) {
			if (distances[edge.first.first] + edge.second < distances[edge.first.second]) {
				distances[edge.first.second] = distances[edge.first.first] + edge.second;
			}
		}
	}

	for (auto edge : edges) {
		if (distances[edge.first.first] + edge.second < distances[edge.first.second]) {
			cout << "Ciclu negativ!";
			return;
		}
	}

	for (int i = 2; i <= n; ++i) {
		cout << distances[i] << ' ';
	}
}

int main() {
	cin.sync_with_stdio(false);
	cout.sync_with_stdio(false);
	
	int v1, v2, cost;

	cin >> n >> m;

	for (int i = 0; i < m; ++i) {
		cin >> v1 >> v2 >> cost;
		edges.push_back(make_pair(make_pair(v1, v2), cost));
	}

	bellmanford();
	
	return 0;
}