Pagini recente » Cod sursa (job #2027386) | Cod sursa (job #2248484) | Cod sursa (job #2696616) | Cod sursa (job #450495) | Cod sursa (job #1628787)
#include<cstdio>
#include<vector>
using namespace std;
vector<int>L[10100];
int n,m,i,j,a,b,aa,s,c[1010][1010],v[1010],x[1010][1010],t[1010],q[100100];
FILE *f,*g;
int minim(int a,int b){
if(a<b)
return a;
return b;
}
int bfs(){
for(i=1;i<=n;i++){
v[i]=0;
}
v[1]=1;
q[1]=1;
int p=1,u=1;
while(p<=u){
a=q[p];
for(int i=0;i<L[a].size();i++){
if( v[ L[a][i] ] == 0 && c[a][ L[a][i] ] > x[a][ L[a][i] ] ){
q[++u]=L[a][i];
v[ L[a][i] ] = 1;
t[ L[a][i] ] = a;
}
}
p++;
}
return v[n];
}
int main(){
f=fopen("maxflow.in","r");
g=fopen("maxflow.out","w");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++){
fscanf(f,"%d%d%d",&a,&b,&aa);
L[a].push_back(b);
L[b].push_back(a);
c[a][b]=aa;
}
while( bfs() ){
for(i=0;i<L[n].size();i++){
a=L[n][i];
if( v[a] && c[a][n] > x[a][n] ){
b=c[a][n]-x[a][n];
while(t[a] != 0){
b = minim( b , c[ t[a] ][a] - x[ t[a] ][a] );
a=t[a];
}
a=L[n][i];
x[a][n] += b;
x[n][a] -= b;
while( t[a] != 0 ){
x[ t[a] ][a] += b;
x[a][ t[a] ] -= b;
a=t[a];
}
s+=b;
}
}
}
fprintf(g,"%d",s);
fclose(f);
fclose(g);
return 0;
}