Cod sursa(job #2202062)

Utilizator flibiaVisanu Cristian flibia Data 7 mai 2018 14:20:40
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
#define N 1010

using namespace std;

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

int n, m, x, y, c, C[N][N], dad[N], flow, maxflow;
vector <int> v[N];
bool viz[N];
queue <int> q;

bool bfs(){
	memset(viz, 0, sizeof viz);
	while(q.size())
		q.pop();
	viz[1] = 1;
	q.push(1);
	bool flag = 1;
	while(q.size() && flag){
		x = q.front();
		q.pop();
		for(auto i : v[x])
			if(!viz[i] && C[x][i] > 0){
				viz[i] = 1;
				dad[i] = x;
				q.push(i);
				if(i == n){
					flag = 0;
					break;
				}
			}
	}
	return !flag;
}

int main(){
	in >> n >> m;
	while(m--){
		in >> x >> y >> c;
		v[x].push_back(y);
		v[y].push_back(x);
		C[x][y] = c;
	}
	while(bfs()){
		flow = 123456;
		for(int i = n; dad[i] != 0; i = dad[i])
			flow = min(flow, C[dad[i]][i]);
		for(int i = n; dad[i] != 0; i = dad[i]){
			C[dad[i]][i] -= flow;
			C[i][dad[i]] += flow;
		}
		maxflow += flow;
	}
	out << maxflow;
	return 0;
}