Cod sursa(job #287378)
Utilizator | Data | 24 martie 2009 19:59:38 | |
---|---|---|---|
Problema | Flux maxim | Scor | 20 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.01 kb |
#include<stdio.h>
#define NMAX 1001
int a[NMAX][NMAX],f[NMAX][NMAX];//,viz[NMAX];
struct coada{int nod,tata;}c[10001];
int p,i,j,u,tz,nod,n,m,t,minim,fluxMaxim;
int main(void)
{
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",&t,&p,&u);
a[t][p]=u;
}
p=u=1;
c[p].nod=1;
c[p].tata=0;
while(p<=u)
{
nod=c[p].nod;
for(i=1;i<=n;i++)
{
if(a[nod][i]!=0)
{
if(a[nod][i]>f[nod][i])//||f[i][nod]>0
{
u++;
c[u].nod=i;
c[u].tata=p;
//printf("%d ",i);
if(i==n)
{
t=u;
minim=1200000;
while(c[t].tata!=0)
{
tz=a[c[c[t].tata].nod][c[t].nod]-f[c[c[t].tata].nod][c[t].nod];
if(minim>tz)
{
minim=tz;
}
t=c[t].tata;
}
fluxMaxim+=minim;
//printf("%d",minim);
t=u;
while(c[t].tata!=0)
{
f[c[c[t].tata].nod][c[t].nod]+=minim;
t=c[t].tata;
} /*
for(j=1;j<=n;j++)
{
printf("%d ",viz[j]);
}
printf("\n"); */
}
}
}
}
p++;
} /*
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%d ",f[i][j]);
}
printf("\n");
} */
printf("%d\n",fluxMaxim);
fclose(stdin);
fclose(stdout);
return 0;
}