Pagini recente » Cod sursa (job #1545589) | Cod sursa (job #2052941) | Cod sursa (job #678670) | Cod sursa (job #1403098) | Cod sursa (job #2682457)
#include <iostream>
#include <fstream>
#include <cstring>
#include <queue>
const int NMAX=1001;
std::ifstream in("maxflow.in");
std::ofstream out("maxflow.out");
int n,m,flux;
int c[NMAX][NMAX];
int f[NMAX][NMAX];
int t[NMAX];
int bfs(int s,int d){
std::queue<int>q;
q.push(s);
std::memset(t,0,sizeof(t));
t[s]=-1;
while(!q.empty()){
int top=q.front();
q.pop();
for(int i=1;i<=n;i++)
if(!t[i] && c[top][i]-f[top][i]>0){
q.push(i),t[i]=top;
if(i==d)return 1;
}
}
return 0;
}
int s,d;
void flux_max(){
int i,cr;
for(flux=0;bfs(s,d);flux+=cr){
cr=1e10;
i=d;
while(i!=s)
cr=std::min(cr,c[t[i]][i]-f[t[i]][i]),i=t[i];
i=d;
while(i!=s)
f[t[i]][i]+=cr,f[i][t[i]]-=cr,i=t[i];
}
}
int main(){
in>>n>>m;
s=1;
d=n;
for(int i=1,x,y,z;i<=m;i++){
in>>x>>y>>z;
c[x][y]=z;
}
flux_max();
out<<flux;
return 0;
}