Pagini recente » Cod sursa (job #3291720) | Cod sursa (job #1829893) | Monitorul de evaluare | Cod sursa (job #1609514) | Cod sursa (job #433325)
Cod sursa(job #433325)
#include<stdio.h>
#include<stdlib.h>
FILE *f,*g;
int nr,sem=1,n,m,v[1001][1001],*r[1001],t[1001],max;
int minus()
{
int minim=150000,w;
w=n;
while(t[w]!=0)
{
if(v[t[w]][w]<minim)
minim=v[t[w]][w];
w=t[w];
}
return minim;
}
void down(int val)
{
int w;
w=n;
while(t[w]!=0)
{
v[t[w]][w]-=val;
w=t[w];
}
}
int bf()
{
int pass,p=1,u=1,k,coada[1001],sel[1001];
sel[1]=nr;
t[1]=0;
coada[1]=1;
while(p<=u)
{
for(k=1;k<=r[coada[p]][0];k++)
{
if(v[coada[p]][r[coada[p]][k]]!=0)
{
u++;
coada[u]=r[coada[p]][k];
sel[coada[u]]=nr;
t[coada[u]]=coada[p];
if(coada[u]==n)
{
pass=minus();
down(pass);
max+=pass;
return 1;
}
}
}
p++;
}
return 0;
}
int main()
{
int i,c,x,y;
f=fopen("maxflow.in","r");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
{
r[i]=(int*)realloc(r[i],sizeof(int));
r[i][0]=0;
}
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&x,&y,&c);
v[x][y]=c;
r[x][0]++;
r[x]=(int*)realloc(r[x],(r[x][0]+1)*sizeof(int));
r[x][r[x][0]]=y;
}
fclose(f);
while(sem==1)
{
nr++;
sem=bf();
}
g=fopen("maxflow.out","w");
fprintf(g,"%d\n",max);
fclose(g);
return 0;
}