Pagini recente » Cod sursa (job #220953) | Cod sursa (job #2554019)
#include <bits/stdc++.h>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
const int dim = 1002;
int n, m;
vector <int> v[dim];
int parent[dim];
bool viz[dim];
int cap[dim][dim], flw[dim][dim];
bool bfs(int node){
vector <int> q;
memset(viz, 0, sizeof(viz));
viz[node] = 1;
q.push_back(node);
for(int i = 0; i < q.size(); ++i){
int prnt = q[i];
if(prnt == n)
continue;
for(auto it: v[prnt]){
if(viz[it])
continue;
if(flw[prnt][it] == cap[prnt][it])
continue;
viz[it] = 1;
q.push_back(it);
parent[it] = prnt;
}
}
return viz[n];
}
int main(){
int i, a, b, c;
f >> n >> m;
for(i = 1; i <= m; ++i){
f >> a >> b >> c;
v[a].push_back(b);
v[b].push_back(a);
cap[a][b] = c;
}
int flow = 0;
while(bfs(1)){
int flxmn = 1000000000;
for(int nod = n; nod != 1; nod = parent[nod])
flxmn = min(flxmn, cap[parent[nod]][nod] - flw[parent[nod]][nod]);
if(flxmn != 0){
for(int nod = n; nod != 1; nod = parent[nod]){
flw[parent[nod]][nod] += flxmn;
flw[nod][parent[nod]] -= flxmn;
}
flow += flxmn;
}
}
g << flow;
return 0;
}