Pagini recente » Cod sursa (job #122095) | Cod sursa (job #171819) | Cod sursa (job #1725573) | Cod sursa (job #579979) | Cod sursa (job #291352)
Cod sursa(job #291352)
#include <stdio.h>
#include <string.h>
#include <queue>
#define N 5
using namespace std;
queue <int> coada;
int n,a[N][N],tata[N],viz[N],f;
int bf()
{int q,i;
coada.push(1);
while(!coada.empty())
{q=coada.front();
coada.pop();
for (i=1;i<=n;i++)
{if(viz[i]==0&&a[q][i]!=0)
{if (i==n)
return q;
viz[i]=1;
tata[i]=q;
coada.push(i);
}
}
}
return 0;
}
void opt(int q)
{int i,min;
for (i=q,min=a[q][n];i>1;i=tata[i])
{if (min>a[tata[i]][i])
min=a[tata[i]][i];
}
if(min==0)return;
a[q][n]-=min;
a[n][q]+=min;
f+=min;
for (i=q;i>1;i=tata[i])
{a[tata[i]][i]-=min;
a[i][tata[i]]+=min;
}
}
int main ()
{int m,i,x,y,z,min,q;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++)
{scanf("%d%d%d",&x,&y,&z);
a[x][y]=z;
}
while(q=bf())
{opt(q);
while(!coada.empty())
{q=coada.front();
coada.pop();
if(a[q][n]!=0)
opt(q);
}
while(!coada.empty());
memset(viz,0,sizeof(viz));
memset(tata,0,sizeof(tata));
}
printf("%d",f);
return 0;
}