in=N; for(int i=Adj[u];~i;i=edge[i].next) if(edge[i].cap-edge[i].flow&&dep[edge[i].to]
=edge[i].cap) continue; if(v==pre) continue; if(dfs(v,u)) return true; } vis[u]=false; return false; } int main() { while(scanf("%d%d%d",&n,&m,&limit)!=EOF) { init(); int sum1=0,sum2=0; for(int i=1;i<=n;i++) scanf("%d",a+i),sum1+=a[i]; for(int i=1;i<=m;i++) scanf("%d",b+i),sum2+=b[i]; if(sum1!=sum2) { puts("Impossible"); continue; } /**************build graph *****************/ for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { id[i][j]=Size; addedge(i,n+j,limit); } for(int i=1;i<=n;i++) addedge(0,i,a[i]); for(int i=1;i<=m;i++) addedge(n+i,n+m+1,b[i]); /**************build graph *****************/ int MaxFlow=sap(0,n+m+1,n+m+1+2); //cout<<"MaxFlow: "<
|