int n,k,a[200],b[200]; int p[200][200],q[200][200]; int nn_s,nn_t,nn_a[200],nn_b[200],nn_p[200][200]; minCostFlow f; { rd(n,k,a(n),b(n),p(n,n)); f.malloc(n*n+n+n+2); f.init(n*n+n+n+2); int nn=0; nn_s=nn++; nn_t=nn++; rep(i,n) nn_a[i]=nn++; rep(j,n) nn_b[j]=nn++; rep(i,n) rep(j,n) nn_p[i][j]=nn++; rep(i,n) f.addEdge(nn_s,nn_a[i],a[i],0); rep(i,n) rep(j,n) rep(m,a[i]) f.addEdge(nn_a[i],nn_p[i][j],1,(m-p[i][j])*2+1); rep(i,n) rep(j,n) f.addEdge(nn_p[i][j],nn_b[j],200,0); rep(j,n) f.addEdge(nn_b[j],nn_t,b[j],0); int fres,z; f.solve(nn_s,nn_t,fres,z); rep(i,n) rep(j,n) z+=p[i][j]**2; wt(z); }