Cod sursa(job #2603906)

Utilizator MarcGrecMarc Grec MarcGrec Data 21 aprilie 2020 11:15:40
Problema Flux maxim Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#define MAX_N 1000
#define INF 0x3f3f3f3f

#include <fstream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;

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

int n, m, flow, step = 1;
vector<pair<int, int>> G[MAX_N + 1];

bool Dfs(int node, int& mi);

int main()
{
	fin >> n >> m;
	for (int i = 0, x, y, c; i < m; ++i)
	{
		fin >> x >> y >> c;
		G[x].emplace_back(y, c);
	}
	
	int mi = INF;
	while (Dfs(1, mi))
	{
		flow += mi;
		
		mi = INF;
		++step;
	}
	
	fout << flow;
	
	fin.close();
	fout.close();
	return 0;
}

int V[MAX_N + 1];
bool Dfs(int node, int& mi)
{	
	V[node] = step;
		
	if (node == n)
	{
		return true;
	}
	
	for (auto& neigh : G[node])
	{
		if ((V[neigh.first] != step) && (neigh.second != 0))
		{
			int min_aux = min(mi, neigh.second);
			
			if (Dfs(neigh.first, min_aux))
			{
				mi            = min(mi, min_aux);
				neigh.second -= mi;
				
				return true;
			}
		}
	}
	
	return false;
}