Pagini recente » Cod sursa (job #2783419) | Cod sursa (job #2057309) | Cod sursa (job #9693) | Cod sursa (job #974569) | Cod sursa (job #1153162)
#include <cstdio>
using namespace std;
int poz,sfq,i,t,n,m,aux,x,y,j,fmax;
int bfs[1001][2],viz[1001],next[10001],dest[10001],cost[1001][1001],st[1001],sf[1001],f[1001];
int min(int a, int b){if(a>b){return b;}return a;}
void parcurge()
{
for(poz=1;poz<=sfq;poz++){
for(i=st[bfs[poz][0]];i;i=next[i]){
if((cost[bfs[poz][0]][dest[i]])&&(viz[dest[i]]!=t)){
f[++sfq]=min(f[poz],cost[bfs[poz][0]][dest[i]]);
bfs[sfq][0]=dest[i];
bfs[sfq][1]=poz;
viz[dest[i]]=t;
if(bfs[sfq][0]==n){
aux=sfq;fmax+=f[sfq];
for(j=bfs[sfq][1];j;j=bfs[j][1]){
cost[bfs[j][0]][bfs[aux][0]]-=f[sfq];
cost[bfs[aux][0]][bfs[j][0]]+=f[sfq];
aux=j;
}
return;
}
}
}
}
}
void add(int x,int y)
{
if(st[x]){next[sf[x]]=poz;}
else{st[x]=poz;}
next[poz]=0;dest[poz]=y;sf[x]=poz;
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(i=1;i<=m;i++){
scanf("%ld%ld%ld",&x,&y,&aux);cost[x][y]=aux;
poz++;add(x,y);
poz++;add(y,x);
}
t=0;
do{
t++;viz[1]=t;
sfq=1;bfs[1][0]=1;f[1]=111111;
parcurge();
}while(viz[n]==t);
printf("%ld",fmax);
return 0;
}