Pagini recente » Cod sursa (job #1843752) | Cod sursa (job #2417224)
#include <bits/stdc++.h>
#define DMAX 1010
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector <int> V[DMAX];
int cap[DMAX][DMAX];
bool uz[DMAX];
int tata[DMAX];
int n,maxim;
inline int minim(int x,int y){
if(x<y)
return x;
return y;
}
bool bfs();
int main(){
int m,i,x,y,z,ii;
int flow;
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>x>>y>>z;
V[x].push_back(y);
V[y].push_back(x);
cap[x][y]=z;
}
while(bfs()){
for(auto& i:V[n])
if(uz[i] && cap[i][n]){
flow=INT_MAX/2;
tata[n]=i;
for(ii=n;ii!=1;ii=tata[ii])
flow=minim(flow,cap[tata[ii]][ii]);
for(ii=n;ii!=1;ii=tata[ii]){
cap[tata[ii]][ii]-=flow;
cap[ii][tata[ii]]+=flow;
}
maxim+=flow;
}
}
fout<<maxim<<'\n';
return 0;
}
bool bfs(){
queue <int> C;
int node;
memset(uz,0,sizeof(uz));
uz[1]=true;
C.push(1);
while(!C.empty()){
node=C.front();
C.pop();
for(auto& i:V[node])
if(!uz[i] && cap[node][i]){
uz[i]=true;
tata[i]=node;
if(i!=n)
C.push(i);
}
}
return uz[n];
}