Pagini recente » Cod sursa (job #3253072) | Cod sursa (job #2053126) | Cod sursa (job #2496869) | Cod sursa (job #2422551) | Cod sursa (job #2961446)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m;
vector< vector<int > > edges;
int cap[1005][1005];
int flow[1005][1005];
vector<int> arb;
vector<int> vis;
int maxFlow;
bool bfs(){
fill(arb.begin(), arb.end(),0);
fill(vis.begin(), vis.end(),0);
arb[1] = 1;
vis[1] = 1;
queue<int> q;
q.push(1);
while(!q.empty()){
int curr = q.front();
q.pop();
if(curr == n)
return true;
for(int i = 0; i < edges[curr].size(); ++i){
if(vis[edges[curr][i]] == 0 && flow[curr][edges[curr][i]] < cap[curr][edges[curr][i]]){
arb[edges[curr][i]] = curr;
vis[edges[curr][i]] = 1;
q.push(edges[curr][i]);
}
}
}
return false;
}
int main(){
fin >> n >> m;
edges.resize(n+5);
arb.resize(n+5);
vis.resize(n+5);
int a,b,c;
for(int i = 0; i < m; ++i){
fin >> a >> b >> c;
edges[a].push_back(b);
edges[b].push_back(a);
cap[a][b] = c;
}
while(bfs()){
for(int i = 0; i <= edges[n].size(); ++i){
if(vis[edges[n][i]] == 1){
int fl = INT_MAX;
arb[n] = edges[n][i];
for(int j = n; j != 1; j = arb[j]){
fl = min(fl, cap[arb[j]][j]-flow[arb[j]][j]);
}
if(fl != 0){
for(int j = n; j != 1; j = arb[j]){
flow[arb[j]][j] += fl;
flow[j][arb[j]] -= fl;
}
maxFlow += fl;
}
}
}
}
fout << maxFlow;
}