Pagini recente » Cod sursa (job #1288512) | Cod sursa (job #1301174) | Cod sursa (job #696586) | Cod sursa (job #2549549) | Cod sursa (job #2216712)
#include <bits/stdc++.h>
#pragma GCC optimize("03")
#define N 1010
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int n, m, x, y, c, E[N << 4], e[N << 4], dad[N], flow, maxflow;
vector <pair <int, int> > v[N];
queue <int> q;
bool viz[N];
bool bfs(){
memset(viz, 0, sizeof viz);
while(q.size())
q.pop();
q.push(1);
viz[1] = 1;
while(q.size()){
int from = q.front();
q.pop();
if(from == n)
continue;
for(auto to : v[from]){
if(!viz[to.first] && E[to.second] > 0){
dad[to.first] = from;
viz[to.first] = 1;
e[to.first] = to.second;
q.push(to.first);
}
}
}
return viz[n];
}
int main(){
in >> n >> m;
for(int i = 1; i <= m; i++){
in >> x >> y >> c;
v[x].push_back(make_pair(y, i << 1));
v[y].push_back(make_pair(x, (i << 1) | 1));
E[i << 1] = c;
}
while(bfs()){
maxflow = 123456;
for(int i = n; dad[i] != 0; i = dad[i])
maxflow = min(maxflow, E[e[i]]);
for(int i = n; dad[i] != 0; i = dad[i]){
E[e[i]] -= maxflow;
E[e[i] ^ 1] += maxflow;
}
flow += maxflow;
}
out << flow;
return 0;
}