专栏文章

P1791 [国家集训队] 人员雇佣 题解

P1791题解参与者 4已保存评论 4

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
4 条
当前快照
1 份
快照标识符
@mipx825w
此快照首次捕获于
2025/12/03 19:25
3 个月前
此快照最后确认于
2025/12/03 19:25
3 个月前
查看原文

思路

感觉比较像 P4313。
先不考虑同时选两个人的情况,则源点代表自己要选哪些,汇点表示对方选哪些,则将源点向每个 ii 连一条价值为 AiA_i 的边,将每个 ii 向汇点连一条价值为 j=1nEi,j\sum_{j=1}^nE_{i,j} 的边。
考虑同时选两个人的情况,此时对于 iijj,一定形如 iissjjtt。此时这么选的代价为 2Ei,j2E_{i,j},则在 iijj 之间连价值为 2Ei,j2E_{i,j} 的边。
见图跑网络流即可。
建图部分:
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 条评论,欢迎与作者交流。

正在加载评论...