Pagini recente » Cod sursa (job #1234385) | Cod sursa (job #1828088) | Cod sursa (job #512421) | Cod sursa (job #852603) | Cod sursa (job #1340779)
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
vector<int>L[1010];
int n,m,a,b,i,s,aa,c[1010][1010],q[100100],v[1010],x[1010][1010],t[1010];
FILE *f,*g;
int bfs(){
int p=1,u=1;
for(int i=2;i<=n;i++){
v[i]=0;
}
q[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,&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(c[a][n] > x[a][n] && v[a]==1 ){
b = c[a][n] - x[a][n];
while(t[a]!=0){
if(c[ t[a] ][a] - x[ t[a] ][a] < b )
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;
}