Pagini recente » Cod sursa (job #2003277) | Cod sursa (job #2297888) | Borderou de evaluare (job #1567369) | Cod sursa (job #2002754) | Cod sursa (job #574079)
Cod sursa(job #574079)
#include<stdio.h>
#include<vector>
int cap[1001][1001];
int flow[1001][1001];
int N;
int M;
int TT[1001];
short int viz[1001];
long int Fmin;
long int MAX;
void citire(void)
{
int a;
int b;
int z;
FILE *f = fopen("maxflow.in","r");
fscanf(f,"%d %d",&N,&M);
for(int i=1;i<=M;i++)
{
fscanf(f,"%d %d %d",&a,&b,&z);
cap[a][b] = z;
}
fclose(f);
}
int parcurgere(void)
{
int C[1001];
memset(viz,0,sizeof(viz));
memset(TT,0,sizeof(TT));
int pi = 1;
int pf = 1;
C[1] = 1;
viz[1] = 1;
TT[1] = 0;
while(pi<=pf)
{
for(int i=1;i<=N;i++)
if(cap[C[pi]][i]-flow[C[pi]][i]>0 && !viz[i])
{
C[++pf] = i;
TT[i] = C[pi];
viz[i] = 1;
if(i == N)
return 1;
}
pi ++;
}
return 0;
}
void fluxmax(void)
{
for(MAX;parcurgere();MAX += Fmin)
{
Fmin = 2000000;
for(int i=N;i!=1;i = TT[i])
if(Fmin>cap[TT[i]][i]-flow[TT[i]][i])
Fmin = cap[TT[i]][i]-flow[TT[i]][i];
for(int i=N;i!=1;i = TT[i])
flow[TT[i]][i] += Fmin,
flow[i][TT[i]] -= Fmin;
}
}
int main()
{
FILE *f = fopen("maxflow.out","w");
citire();
fluxmax();
fprintf(f,"%d ",MAX);
fclose(f);
return 0;
}