Cod sursa(job #2422198)

Utilizator andreibudoiAndrei Budoi andreibudoi Data 17 mai 2019 18:57:13
Problema Flux maxim Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#if 1
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;

int mat[20005][20005];
int viz[20005];
int minCut[20005];
int n, m;

int dfs(int node, int sink, int flux, int ind)
{
	if (node == sink)return flux;

	viz[node] = ind;
	int i;
	for (i = 1; i <= n; i++)
		if (viz[i] != ind && mat[node][i] > 0)
		{
			if (mat[node][i] < flux)flux = mat[node][i];

			int dfsFlux = dfs(i, sink, flux, ind);

			if (dfsFlux > 0)
			{
				mat[node][i] -= dfsFlux;
				mat[i][node] += dfsFlux;
				return dfsFlux;
			}

		}

	return 0;
}

int main()
{
	int i, x, y, c;
	ifstream f("maxflow.in");
	ofstream g("maxflow.out");
	f >> n >> m;
	for (i = 0; i < m; i++)
	{
		f >> x >> y >> c;
		mat[x][y] = c;

	}
	/*for (i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++)
			cout << mat[i][j] << " ";
		cout << endl;
	}
	cout << endl;*/
	
	int indexViz = 1;
	int maxFlux = 0;
	int flux = 0;
	for (;;)
	{
		flux = dfs(1, n, 200005, indexViz);
		indexViz++;
		maxFlux += flux;
		
		/*for (i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++)
				cout << mat[i][j] << " ";
			cout << endl;
		}
		cout << endl;*/
		if (flux == 0) {
			break;
		}
	}

	g << maxFlux;
	//cout << maxFlux;
	return 0;


}
#endif