Pagini recente » Cod sursa (job #591246) | Cod sursa (job #95814) | Cod sursa (job #1277359) | Cod sursa (job #166660) | Cod sursa (job #256490)
Cod sursa(job #256490)
#include<stdio.h>
#define NMAX 1001
#define MMAX 5001
#define min(a,b) a<b? a:b
int e[NMAX][NMAX],c[NMAX][NMAX],f[NMAX][NMAX],source,sink,n,m,flow,maxflow=0,p[NMAX];;
void citire()
{
int x,y,z,i;
freopen("maxflow.in","r",stdin);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
c[x][y]=z;
}
/*for(i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
printf("%d ",c[i][j]);
printf("\n");
}*/
}
int BFS(int source)
{
int q[NMAX],pr,ul,i,k;
for(i=1;i<=n;i++)
p[i]=-1;
pr=ul=1;
flow=32000;
q[1]=source;
p[source]=0;
while(pr<=ul)
{
k=q[pr++];
for(i=1;i<=n;i++)
if(c[k][i]&&p[i]==-1&&c[k][i]-f[k][i]>0)
{
flow=min(flow,c[k][i]-f[k][i]);
p[i]=k;
if(i==sink)return flow;
q[++ul]=i;
}
}
return 0;
}
int EdmondsKarp()
{
flow=BFS(source);
while(flow)
{
int v=sink,u;
maxflow+=flow;
while(v!=source)
{
u=p[v];
f[u][v]+=flow;
f[v][u]-=flow;
v=u;
}
flow=BFS(source);
}
return maxflow;
}
int main()
{
citire();
source=1;
sink=n;
freopen("maxflow.out","w",stdout);
printf("%d",EdmondsKarp());
return 0;
}