Pagini recente » Cod sursa (job #240177) | Cod sursa (job #1370151) | Cod sursa (job #3042306) | Cod sursa (job #1632950) | Cod sursa (job #1881785)
#include <bits/stdc++.h>
#define NMAX 1015
#define INF (1LL<<31)-1
using namespace std;
ifstream fin ("maxflow.in");
ofstream fout ("maxflow.out");
vector < int > G[NMAX];
int F[NMAX][NMAX],ant[NMAX];
bool B[NMAX];
bool BFS(const int &N){
int nod;
memset(B,0,NMAX);
B[1] = 1;
queue < int > Q;
Q.push(1);
while(!Q.empty()){
nod = Q.front();
Q.pop();
if(nod == N) continue;
for(auto const &it : G[nod]){
if(B[it] || !F[nod][it]) continue;
B[it] = 1;
Q.push(it);
ant[it] = nod;
}
}
return B[N];
}
int main()
{
ios :: sync_with_stdio(false);
fin.tie(NULL);
int n,m,x,y,c;
fin >> n >> m;
for(int i = 1; i <= m; i++){
fin >> x >> y >> c;
G[x].push_back(y);
G[y].push_back(x);
F[x][y] = c;
}
int flow = 0,mflow;
while(BFS(n)){
for(auto const &it : G[n]){
if(!B[it] || !F[it][n]) continue;
ant[n] = it;
mflow = INF;
for(int i = n; i != 1; i = ant[i])
mflow = min(mflow,F[ant[i]][i]);
if(mflow == 0) continue;
for(int i = n; i != 1; i = ant[i]){
F[ant[i]][i] -= mflow;
F[i][ant[i]] += mflow;
}
flow += mflow;
}
}
fout << flow;
return 0;
}