Cod sursa(job #2421123)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 14 mai 2019 12:27:32
Problema Flux maxim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include<cstdio>
const int N=1001,M=15000000;
int i,j,n,m,y,l,k,w[N],g[N][N],e[N][N],b[N],c[5*N],t=-1;
char r[M];
inline int A()
{
  	int s=0;
  	for(t++;r[t]>47;t++)
  		s=s*10+r[t]-48;
  	return s;
}
int main()
{
    freopen("maxflow.in","r",stdin),freopen("maxflow.out","w",stdout),fread(r,1,M,stdin),n=A(),m=A();
    while(m--)
        i=A(),j=A(),l=A(),g[i][w[i]++]=j,g[j][w[j]++]=i,e[i][j]+=l;
    while(1)
	{
        for(j=1;j<=n;j++)
            b[j]=0;
        for(j=c[0]=c[1]=1;j<=c[0]&&!b[n];j++)
        	for(k=c[j],i=0;i<w[k];i++)
        		if(!b[g[k][i]]&&e[k][g[k][i]])
            		b[c[++c[0]]=g[k][i]]=k;
        if(!b[n])
            break;
        for(i=0;i<w[n];i++)
        	if(b[g[n][i]]&&e[g[n][i]][n])
			{
            	for(l=N*N,j=k=g[n][i],b[n]=k;j>1;j=b[j])
                	l=l>e[b[j]][j]?e[b[j]][j]:l;
            	for(l=l>e[k][n]?e[k][n]:l,y+=l,j=n;j>1;j=b[j])
                	e[b[j]][j]-=l,e[j][b[j]]+=l;
        	}
    }
    printf("%d",y);
}