Cod sursa(job #2402720)

Utilizator CojocariuAlexandruCojocariu Alexandru CojocariuAlexandru Data 10 aprilie 2019 22:46:48
Problema Flux maxim Scor 40
Compilator cpp-32 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 1005
#define INF 999999999

using namespace std;

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

int GRezid[NMAX][NMAX];
int vizited[NMAX], parent[NMAX];
int n, m, i, x, y, cost, maxFlow, minim;

int BFS();

int main()
{
	fin >> n >> m;
	for (i = 1; i <= m; ++i) {
		fin >> x >> y >> cost;
		GRezid[x][y] = cost;
		}
	while (BFS() == 1) {
		minim = INF;
		for (i = n; parent[i] != -1; i = parent[i]) {
			if (GRezid[parent[i]][i] < minim)
				minim = GRezid[parent[i]][i];
			}
		for (i = n; parent[i] != -1; i = parent[i]) {
			GRezid[parent[i]][i] -= minim;
			}
		maxFlow += minim;
		for (i = 1; i <=n; ++i)
			vizited[i] = 0;
		}
	fout << maxFlow << '\n';
    return 0;
}

int BFS() {
	int val;
	queue<int> q;
	q.push(1);
	vizited[1] = 1;
	parent[1] = -1;
	while (!q.empty()) {
		val = q.front();
		q.pop();
		for (i = 1; i <= n; ++i) {
			if (GRezid[val][i] > 0 && vizited[i] == 0) {
				parent[i] = val;
				vizited[i] = 1;
				q.push(i);
				}
			}
		}
	if (vizited[n] == 1)
		return 1;
	return 0;
}