Pagini recente » Cod sursa (job #2384767) | Cod sursa (job #1881451) | Cod sursa (job #2315772) | Cod sursa (job #1068867) | Cod sursa (job #2678868)
#include <bits/stdc++.h>
using namespace std;
//ifstream f("date.in");
//ofstream g("data.out");
ifstream f("maxflow.in");
ofstream g("maxflow.out");
//#define f cin
//#define g cout
const int dim = 1e3 + 1;
int n, m, ff;
int gr[dim][dim];
int parents[dim];
bool mark[dim];
vector <int> v[dim];
bool bfs(){
queue <int> q;
q.push(1);
memset(mark, 0, sizeof(mark));
mark[1] = 1;
while(!q.empty()){
int node = q.front(); q.pop();
if(node == n)
continue;
for(int i: v[node]){
if(!mark[i] && gr[node][i] > 0){
mark[i] = 1;
parents[i] = node;
q.push(i);
}
}
}
return mark[n];
}
int main()
{
int i, j, a , b, c;
f >> n >> m;
for(i = 1; i <= m; ++i){
f >> a >> b >> c;
gr[a][b] = c;
v[a].push_back(b);
v[b].push_back(a);
}
while(bfs()){
for(i = 1; i <= n; ++i){
if(gr[i][n] > 0 && mark[i]){
int floox = INT_MAX;
parents[n] = i;
for(a = n; a != 1; a = parents[a]){
b = parents[a];
floox = min(floox, gr[b][a]);
}
ff += floox;
for(a = n; a != 1; a = parents[a]){
b = parents[a];
gr[b][a] -= floox;
gr[a][b] += floox;
}
}
}
}
g << ff;
return 0;
}