专栏文章
P1791 [国家集训队] 人员雇佣 题解
P1791题解参与者 4已保存评论 4
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mipx825w
- 此快照首次捕获于
- 2025/12/03 19:25 3 个月前
- 此快照最后确认于
- 2025/12/03 19:25 3 个月前
思路
感觉比较像 P4313。
先不考虑同时选两个人的情况,则源点代表自己要选哪些,汇点表示对方选哪些,则将源点向每个 连一条价值为 的边,将每个 向汇点连一条价值为 的边。
考虑同时选两个人的情况,此时对于 和 ,一定形如 连 且 连 。此时这么选的代价为 ,则在 , 之间连价值为 的边。
见图跑网络流即可。
建图部分:
CPP//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;
}
相关推荐
评论
共 4 条评论,欢迎与作者交流。
正在加载评论...