Cod sursa(job #2284861)

Utilizator theodor.moroianuTheodor Moroianu theodor.moroianu Data 17 noiembrie 2018 18:17:30
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
using namespace std;

const int DIM_MAX = 1010;

namespace Flow {
	struct Edge {
		int from, to, cap;
	};
	vector <Edge> edges;
	vector <int> adia[DIM_MAX];
	bool viz[DIM_MAX];
	int s, d, c, n;


	bool dfs(int nod) {
		viz[nod] = 1;
		if (nod == d)
			return true;
		for (auto i : adia[nod]) {
			if (edges[i].cap >= c && !viz[edges[i].to] && dfs(edges[i].to)) {
				edges[i].cap -= c;
				edges[i ^ 1].cap += c;
				return true;
			}
		}
		return false;
	}
	void add_edge(int from, int to, int cap) {
		adia[from].push_back(edges.size());
		edges.push_back({ from, to, cap });
		adia[to].push_back(edges.size());
		edges.push_back({ to, from, 0 });
	}
	int max_flow(int _s, int _d) {
		s = _s, d = _d;
		int flow = 0;
		for (c = 110000; c; ) {
			memset(viz, 0, sizeof viz);
			if (dfs(s))
				flow += c;
			else
				c /= 2;
		}
		return flow;
	}
}



int main()

{

	ifstream in("maxflow.in");

	ofstream out("maxflow.out");

	int n, m, a, b, c;

	in >> n >> m;

	while (m--) {

		in >> a >> b >> c;

		Flow::add_edge(a, b, c);

	}



	out << Flow::max_flow(1, n) << '\n';



	return 0;

}