Pagini recente » Cod sursa (job #1648566) | Istoria paginii runda/oni2018ziua1/clasament | Cod sursa (job #3290090) | Istoria paginii runda/zxzx/clasament | Cod sursa (job #1511302)
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
vector<int>L[1010];
int n,m,i,j,a,aa,aaa,s,v[1010],q[1001000],c[1010][1010],x[1010][1010],t[1010];
FILE *f,*g;
int bfs(){
int p=1,u=1;
memset(v,0,sizeof(v));
q[1]=1;
v[1]=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] ] ){
v[ L[a][i] ]=1;
q[++u]=L[a][i];
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,&aa,&aaa);
L[a].push_back(aa);
L[aa].push_back(a);
c[a][aa]=aaa;
}
while(bfs()){
for(i=0;i<L[n].size();i++){
a=L[n][i];
if(x[a][n]<c[a][n] && v[a]==1){
aa=c[a][n]-x[a][n];
while(t[a]!=0){
if( c[ t[a] ][a] - x[ t[a] ][a] < aa)
aa = c[ t[a] ][a] - x[ t[a] ][a];
a=t[a];
}
a=L[n][i];
x[a][n]+=aa;
x[n][a]-=aa;
while(t[a]!=0){
x[ t[a] ][a]+=aa;
x[a][ t[a] ]-=aa;
a=t[a];
}
s+=aa;
}
}
}
fprintf(g,"%d",s);
fclose(f);
fclose(g);
return 0;
}