Pagini recente » Cod sursa (job #224727) | Diferente pentru utilizator/popoiu.george intre reviziile 64 si 40 | Profil Daria1809 | Profil BlueLuca888 | Cod sursa (job #346329)
Cod sursa(job #346329)
#include<stdio.h>
#define min(x,y) (x<y?x:y)
#define Nmax 1010
#define Mmax 5010
FILE *fin=fopen("maxflow.in","r"),
*fout=fopen("maxflow.out","w");
int N,M,S,D,F;
int A[Nmax][Nmax],T[Nmax];
char viz[Nmax];
int coada[Nmax];
int bfs()
{
for(int i=1;i<=N;i++) viz[i]=0;
int li,lf;
li=lf=1;
coada[li]=S;
viz[S]=1;
while(li<=lf)
{
int nod=coada[li++];
for(int i=1;i<=N;i++)
if(A[nod][i] && !viz[i])
{
T[i]=nod;
viz[i]=1;
coada[++lf]=i;
if(i==D)
return 1;
}
}
return 0;
}
void afis()
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
printf("%d ",A[i][j]);
printf("\n");
}
printf("\n");
}
int main()
{
fscanf(fin,"%d %d",&N,&M);
S=1;D=N;T[S]=-1;
for(int i=1;i<=M;i++)
{
int x,y,z;
fscanf(fin,"%d %d %d",&x,&y,&z);
A[x][y]=z;
}
//afis();
int flow;
while(bfs())
{
flow=1000000;
for(int i=D;T[i]!=-1;i=T[i])
flow=min(flow,A[T[i]][i]);
for(int i=D;T[i]!=-1;i=T[i])
{
A[i][T[i]]+=flow;
A[T[i]][i]-=flow;
}
F+=flow;
//printf("%d\n",flow);
//afis();
}
fprintf(fout,"%d\n",F);
fclose(fin);
fclose(fout);
return 0;
}