void solve(void) { int totalp = 0; for(int i=0;i<n;++i) totalp += ni[i]; for(int i=0;i<n;++i) for(int j=0;j<n;++j) if(hypot(x[i]-x[j],y[i]-y[j])<=D) mat[i][j] = 1; else mat[i][j] = 0; vector<int> ans; for(int zz=0;zz<n;++zz) { dinic.init(n*2+1); for(int i=0;i<n;++i) dinic.addedge(i,i+n,mi[i]); for(int i=0;i<n;++i) dinic.addedge(n*2,i,ni[i]); for(int i=0;i<n;++i) for(int j=0;j<n;++j) if(mat[i][j]) dinic.addedge(i+n,j,totalp); if(totalp==dinic.maxFlow(n*2,zz)) ans.push_back(zz); } if(ans.empty()) puts("-1"); else { for(int i=0;i<(int)ans.size();++i) { if(i) putchar(' '); printf("%d",ans[i]); } puts(""); } }
bool solve(void) { int flowneed = 0; for(int i=1;i<=n;++i) { deg[i] = out[i] - in[i]; if(deg[i]%2!=0) return false; if(deg[i]>0) dinic.addedge(0,i,deg[i]/2); else if(deg[i]<0) dinic.addedge(i,n+1,-deg[i]/2); flowneed += deg[i]>0 ? deg[i]/2 : 0; } return flowneed==dinic.maxFlow(0,n+1); }
bool check(int mid) { source = n1+n2; sink = n1+n2+1; dinic.init(n1+n2+2); for(int i=0;i<n1;++i) dinic.addedge(source,i,1); for(int i=0;i<n2;++i) dinic.addedge(i+n1,sink,cap[i]); for(int i=0;i<n1;++i) for(int j=0;j<n2;++j) if(mat[i][j]<=mid) dinic.addedge(i,j+n1,1); dinic.maxFlow(source,sink); return dinic.totalflow==n1; }
bool check(int mid) { for(int z=0;z+mid-1<B;++z) { dinic.init(n+B+2); for(int i=0;i<n;++i) dinic.addedge(n+B,i,1); for(int i=0;i<B;++i) dinic.addedge(n+i,n+B+1,cap[i]); for(int i=z;i<z+mid;++i) for(int j=0;j<n;++j) dinic.addedge(j,n+prefer[j][i],1); if(dinic.maxFlow(n+B,n+B+1)==n) return true; } return false; }
int getshortest(void) { if(D>=W) return 1; build(); dinic.init(MAXN); int totalcnt = 0; for(int tt=1;tt<=n+m;++tt) { for(int i=0;i<n;++i) if(jumpfroms[i]) dinic.addedge(id(source),id(instoneid[tt][i]),INF); for(int i=0;i<n;++i) dinic.addedge(id(instoneid[tt][i]),id(outstoneid[tt][i]),ci[i]); if(tt==1) continue; for(int i=0;i<n;++i) if(jumpfromt[i]) dinic.addedge(id(outstoneid[tt-1][i]),id(sink),INF); for(int i=0;i<n;++i) for(int j=0;j<n;++j) if(canjump[i][j]) dinic.addedge(id(outstoneid[tt-1][i]),id(instoneid[tt][j]),INF); dinic.maxFlow(source,sink); totalcnt += dinic.totalflow; if(totalcnt>=m) return tt; } return -1; }