P1791-[国家集训队]人员雇佣【最大权闭合图】

1|0正题

题目链接:https://www.luogu.com.cn/problem/P1791


1|1题目大意

n个人,雇佣第i个需要Ai的费用,对于Ei,j表示如果i选了的话,选择j会获得Ei,j的费用,不选j会花费Ei,j的费用。

1n1000


1|2解题思路

考虑网最大权值闭合图,先加上所有可以获得的权值,然后考虑需要失去的最小权值。

因为每个人可以选或者不选,那么就可以让s连接ii连接t这样两边必须割掉一条表示选择或者不选择。

考虑让s>i表示选择,那么s>i权值为Ai

i>t表示不选择那么所有由i产生的费用都不能获得,权值为j=1mEi,j

然后对于一个Ei,j如果i选择了且j没有选择那么就会失去2×Ei,j的流量,在ij之间连一条2×Ei,j的就好了。


1|3code

#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define ll long long using namespace std; const ll N=2e4+10,inf=2147483647; struct node{ ll to,next,w; }a[N*4]; ll n,s,t,tot,cnt,A[N],ls[N],dep[N],ans; queue<int> q; void addl(ll x,ll y,ll w){ a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w; a[++tot].to=x;a[tot].next=ls[y];ls[y]=tot;a[tot].w=0; return; } bool bfs(){ memset(dep,0,sizeof(dep));dep[s]=1; while(!q.empty())q.pop();q.push(s); while(!q.empty()){ ll x=q.front();q.pop(); for(ll i=ls[x];i;i=a[i].next){ ll y=a[i].to; if(dep[y]||!a[i].w)continue; dep[y]=dep[x]+1; if(y==t)return 1; q.push(y); } } return 0; } ll dinic(ll x,ll flow){ if(x==t)return flow; ll rest=0,k; for(ll i=ls[x];i;i=a[i].next){ ll y=a[i].to; if(dep[y]!=dep[x]+1||!a[i].w)continue; rest+=(k=dinic(y,min(a[i].w,flow-rest))); a[i].w-=k;a[i^1].w+=k; if(rest==flow)return flow; } if(!rest)dep[x]=0; return rest; } signed main() { scanf("%lld",&n); s=n+1;t=s+1;tot=1; for(ll i=1;i<=n;i++){ ll x; scanf("%lld",&x); addl(s,i,x); } for(ll i=1;i<=n;i++){ ll S=0; for(ll j=1;j<=n;j++){ ll x;scanf("%lld",&x); if(!x)continue; S+=x;addl(i,j,2*x); } addl(i,t,S);ans+=S; } while(bfs()) ans-=dinic(s,inf); printf("%lld\n",ans); return 0; }

__EOF__

本文作者QuantAsk
本文链接https://www.cnblogs.com/QuantAsk/p/15015750.html
关于博主:退役OIer,GD划水选手
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   QuantAsk  阅读(37)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示