P1791 [国家集训队] 人员雇佣 题解
思路
感觉比较像 P4313。
先不考虑同时选两个人的情况,则源点代表自己要选哪些,汇点表示对方选哪些,则将源点向每个
考虑同时选两个人的情况,此时对于
见图跑网络流即可。
建图部分:
//vector 建边
int n=read(),num=0;
s=0;t=n+1;
for(int i=1;i<=n;i++){
int val=read();
v[s].pb(mp(i,++tot));tag[tot]=val;
v[i].pb(mp(s,++tot));tag[tot]=0;
}
for(int i=1;i<=n;i++){
int sum=0;
for(int j=1;j<=n;j++){
int x=read();sum+=x;
if(x){
v[i].pb(mp(j,++tot));tag[tot]=x*2;
v[j].pb(mp(i,++tot));tag[tot]=0;
}
}
v[i].pb(mp(t,++tot));tag[tot]=sum;
v[t].pb(mp(i,++tot));tag[tot]=0;num+=sum;
}