Cod sursa(job #2043284)

Utilizator gabib97Gabriel Boroghina gabib97 Data 19 octombrie 2017 20:29:51
Problema Flux maxim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>
#define N 1003

using namespace std;

int n, m, t[N], C[N][N];
vector<int> G[N];
queue<int> Q;

int BFS()
{
	int s;
	Q.push(1);

	while (!Q.empty())
	{
		s = Q.front();
		Q.pop();

		for (int x: G[s])
			if (!t[x] && C[s][x] > 0)
			{
				t[x] = s;
				Q.push(x);
			}
	}

	return t[n];
}

int main()
{
	freopen ("maxflow.in", "r", stdin);
	freopen ("maxflow.out", "w", stdout);
	
	int i, x, y, c;
	scanf("%i%i", &n, &m);
	for (i = 1; i <= m; i++)
	{
		scanf("%i%i%i", &x, &y, &c);
		C[x][y] = c;
		G[x].push_back(y);
		G[y].push_back(x);
	}

	int flow = 0, w;
	while (BFS())
	{
		for (int x: G[n])
		{
			w = C[x][n];
			for (i = x; i != 1; i = t[i])
				w = min(w, C[t[i]][i]);

			for (i = x; i != 1; i = t[i])
				C[t[i]][i] -= w, C[i][t[i]] += w;

			flow += w;
			C[x][n] -= w;
			C[n][x] += w;
		}

		memset(t, 0, sizeof(t));
	}

	printf("%i", flow);
	return 0;
}