[线性规划 费用流]Codeforces Gym101190D.Delight for a cat
来源:互联网 发布:冰锐和锐澳的区别 知乎 编辑:程序博客网 时间:2024/06/07 05:02
先写出线性规划标准型,然后差分建网络流
具体可以看这个题解
#include <cstdio>#include <iostream>#include <algorithm>#include <queue>using namespace std;typedef long long ll;const int N=1010;const ll inf=1LL<<60;int n,k,ms,me,cnt=1,a[N],b[N],G[N];ll ans;struct edge{ int s,t,nx,w,f;}E[N*10],*p[N];inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline void rea(int &x){ char c=nc(); x=0; for(;c>'9'||c<'0';c=nc());for(;c>='0'&&c<='9';x=x*10+c-'0',c=nc());}inline void add(int x,int y,int f,int w){ E[++cnt].t=y; E[cnt].nx=G[x]; E[cnt].f=f; E[cnt].s=x; E[cnt].w=w; G[x]=cnt; E[++cnt].t=x; E[cnt].nx=G[y]; E[cnt].f=0; E[cnt].s=y; E[cnt].w=-w; G[y]=cnt;}queue<int> Q;ll dis[N];int vis[N],pre[N];int S,T;inline bool spfa(){ for(int i=0;i<=T;i++) dis[i]=inf; dis[S]=0; vis[S]=1; Q.push(S); while(!Q.empty()){ int x=Q.front(); Q.pop(); vis[x]=0; for(int i=G[x];i;i=E[i].nx) if(E[i].f && dis[E[i].t]>dis[x]+E[i].w){ dis[E[i].t]=dis[x]+E[i].w; pre[E[i].t]=i; if(!vis[E[i].t]) vis[E[i].t]=1,Q.push(E[i].t); } } if(dis[T]==inf) return false; int mc=1<<30; for(int i=T;i;i=E[pre[i]].s) mc=min(mc,E[pre[i]].f); ans-=1LL*mc*dis[T]; for(int i=T;i;i=E[pre[i]].s) E[pre[i]].f-=mc,E[pre[i]^1].f+=mc; return true;}int main(){ freopen("delight.in","r",stdin); freopen("delight.out","w",stdout); rea(n); rea(k); rea(ms); rea(me); for(int i=1;i<=n;i++) rea(a[i]); for(int i=1;i<=n;i++) rea(b[i]),ans+=b[i]; S=0; T=n-k+3; add(S,n-k+1,k-me,0); add(n-k+2,T,k-me,0); for(int i=1;i<=n;i++){ int x=i-k,y=i; if(x<1) x=n-k+1; if(y>n-k) y=n-k+2; add(x,y,1,b[i]-a[i]); p[i]=E+cnt-1; } add(n-k+1,1,k-ms-me,0); add(n-k,n-k+2,k-ms-me,0); for(int i=1;i<=n-k-1;i++) add(i,i+1,k-ms-me,0); while(spfa()); printf("%lld\n",ans); ll cur=0; for(int i=1;i<=n;i++){ //if(p[i]->f) cur+=b[i]; else cur+=a[i]; putchar(p[i]->f?'E':'S'); } //printf("\n%lld\n",cur); return 0;}
阅读全文
0 0
- [线性规划 费用流]Codeforces Gym101190D.Delight for a cat
- [费用流建模] Codeforces Gym 101190 NEERC 16 D. Delight for a Cat
- bzoj 4842: [Neerc2016]Delight for a Cat (费用流)
- BJ模拟(1) D1T1 Delight for a Cat
- bzoj 1061(线性规划+费用流)
- 【BZOJ3550】【ONTAK2010】 Vacation 线性规划转费用流
- [BZOJ1061]NOI2008志愿者招募|费用流|线性规划
- 【线性规划+最小费用最大流】Vijos-1825 志愿者招募
- BZOJ 3550 ONTAK2010 Vacation 线性规划转费用流
- 【NOI2008T3】志愿者招募-线性规划+最小费用最大流
- [线性规划 费用流]BZOJ1061 志愿者招募 && BZOJ3112防守战线
- bzoj1061 [Noi2008]志愿者招募(线性规划/费用流)
- Codeforces 164C 费用流
- codeforces 730I (费用流)
- A cat
- 线性规划与网络流24题の17 运输问题(最小费用最大流、最大费用最大流)
- 线性规划与网络流24题の18 分配问题(最小费用最大流、最大费用最大流)
- 线性规划与网络流24题之餐巾计划问题 最小费用最大流
- 数据结构 队列的实现
- 验证子串
- ResourceManager(一)—— ArchiveManager
- 万商联店铺会员管理系统v3.8破解带收银系统
- LinuxStudyNote(42)-RPM包安装、更新、卸载命令、包名和包全名的概念
- [线性规划 费用流]Codeforces Gym101190D.Delight for a cat
- Java I/O Reader及其子类源码解析
- VS2013如何添加LIb库及头文件的步骤
- python开发环境的搭建
- SpringMVC 报org.springframework.beans.factory.NoSuchBeanDefinitionException
- Codeforces438D 线段树取模
- poj 3225 Help with Intervals(线段树+区间更新)
- C++构建堆结构
- python生成文件图片列表