Cod sursa(job #1911723)

Utilizator lflorin29Florin Laiu lflorin29 Data 7 martie 2017 21:36:33
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

const int nMax = 1002;

const int INF = 1e9 * 2;

int n, m;
vector<int>g[nMax];
int cap[nMax][nMax], f[nMax][nMax], par[nMax];
bool us[nMax];

bool bfs() {
	queue<int>q;
	memset(us, 0, sizeof(us));
	memset(par, 0, sizeof(par));
	q.push(1);
	us[1] = true;

	while (!q.empty()) {
		int nod = q.front();
		q.pop();

		for (const auto& i : g[nod]) {
			if (cap[nod][i] - f[nod][i] > 0 and !us[i]) {
				us[i] = true;
				par[i] = nod;
				q.push(i);
			}
		}
	}

	return us[n];
}

int flow() {
	int val = INF;

	for (int i = n; i != 1; i = par[i])
		val = min(val, cap[par[i]][i] - f[par[i]][i]);

	for (int i = n; i != 1; i = par[i]) {
		f[par[i]][i] += val;
		f[i][par[i]] -= val;
	}

	return val;
}
int main() {
	ifstream cin("maxflow.in");
	ofstream cout("maxflow.out");

	cin >> n >> m;

	for (int i = 1; i <= m; ++i) {
		int x, y, c;
		cin >> x >> y >> c;
		g[x].push_back(y);
		g[y].push_back(x);
		cap[x][y] += c;
	}

	int flux = 0;

	while (bfs())
		flux += flow();

	cout << flux;
}