BZOJ 1221 [HNOI2001] 软件开发 费用流_建模
观察上述建模方式与“形象化”图片,我们发现我们构建的网络模型满足流出量与流入量守恒.
每个 $y_{i}$ 会由先前剩下的 $f_{a}$ 与 $f_{b}$ 填充,再由源点直接流入 $y_{i}$ 的 $f$ 所填入.
一个十分巧妙的网络流模型.
Code:
#include <bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 300000
#define inf 1000000
#define N 3005
#define nex(n) (n + 1002)
using namespace std;
struct Edge
{
int from,to,cap,cost;
Edge(int from = 0,int to = 0,int cap = 0,int cost = 0) : from(from),to(to),cap(cap),cost(cost){}
};
vector<Edge>edges;
vector<int>G[maxn];
void addedge(int u,int v,int c,int d)
{
edges.push_back(Edge(u,v,c,d));
edges.push_back(Edge(v,u,0,-d));
int m = edges.size();
G[u].push_back(m - 2);
G[v].push_back(m - 1);
}
int flow2[maxn],d[maxn],inq[N],pre[N],nn[N];
int ans,s,t;
queue <int> Q;
int spfa()
{
for(int i = 0;i < N; ++i) d[i] = flow2[i] = inf;
memset(inq,0,sizeof(inq));
d[s] = 0, inq[s] = 1;
Q.push(s);
while(!Q.empty())
{
int u = Q.front(); Q.pop();
inq[u] = 0;
for(int sz = G[u].size(),i = 0; i < sz ; ++i)
{
Edge e = edges[G[u][i]];
if(d[e.to] > d[u] + e.cost && e.cap > 0)
{
d[e.to] = d[u] + e.cost;
flow2[e.to] = min(e.cap, flow2[u]);
pre[e.to] = G[u][i];
if(!inq[e.to])
{
Q.push(e.to);
inq[e.to] = 1;
}
}
}
}
if(flow2[t] == inf) return 0;
int f = flow2[t];
edges[pre[t]].cap -= f, edges[pre[t] ^ 1].cap += f;
int u = edges[pre[t]].from;
while(u != s)
{
edges[pre[u]].cap -= f, edges[pre[u] ^ 1].cap += f;
u = edges[pre[u]].from;
}
ans += f * d[t];
return 1;
}
int getcost()
{
while(spfa());
return ans;
}
int main()
{
// setIO("input");
int n,a,b,f,fa,fb;
scanf("%d%d%d%d%d%d",&n,&a,&b,&f,&fa,&fb);
for(int i = 1;i <= n; ++i) scanf("%d",&nn[i]);
s = 0,t = 2500;
for(int i = 1;i <= n; ++i)
{
addedge(s, i, nn[i], 0);
addedge(nex(i), t, nn[i], 0);
addedge(s, nex(i), inf, f);
if(i + 1 <= n) addedge(i, i + 1, inf,0);
}
for(int i = 1;i <= n; ++i)
{
if(i + a + 1 <= n) addedge(i,nex(i + 1 + a),inf,fa);
if(i + b + 1 <= n) addedge(i,nex(i + b + 1),inf,fb);
}
printf("%d",getcost());
return 0;
}
BZOJ 1221 [HNOI2001] 软件开发 费用流_建模的更多相关文章
- bzoj 1221 [HNOI2001] 软件开发 费用流
[HNOI2001] 软件开发 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1938 Solved: 1118[Submit][Status][D ...
- BZOJ 1221: [HNOI2001] 软件开发(最小费用最大流)
不知道为什么这么慢.... 费用流,拆点.... --------------------------------------------------------------------------- ...
- BZOJ 1221: [HNOI2001] 软件开发
1221: [HNOI2001] 软件开发 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1428 Solved: 791[Submit][Stat ...
- BZOJ 3280: 小R的烦恼 & BZOJ 1221: [HNOI2001] 软件开发
3280: 小R的烦恼 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 399 Solved: 200[Submit][Status][Discuss ...
- [BZOJ 1221] [HNOI2001] 软件开发 【费用流 || 三分】
题目链接:BZOJ - 1221 题目分析 算法一:最小费用最大流 首先这是一道经典的网络流问题.每天建立两个节点,一个 i 表示使用毛巾,一个 i' 表示这天用过的毛巾. 然后 i 向 T 连 Ai ...
- BZOJ 1221: [HNOI2001] 软件开发【最小费用最大流】
Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...
- 【bzoj1221】[HNOI2001] 软件开发 费用流
题目描述 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供一块消 ...
- BZOJ1221 [HNOI2001]软件开发 - 费用流
题解 非常显然的费用流. 但是建图还是需要思考的QuQ 将每天分成两个节点 $x_{i,1}, x_{i,2} $, $ x_{i,1}$用于提供服务, $x_{i ,2}$ 用来从源点获得$nd[i ...
- BZOJ 1221 [HNOI2001] 软件开发(费用流)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1221 [题目大意] 每天对毛巾都有一定的需求ni,每天可以花f价值每条购买毛巾, 当天 ...
随机推荐
- 【codeforces 793B】Igor and his way to work
[题目链接]:http://codeforces.com/contest/793/problem/B [题意] 给一个n*m大小的方格; 有一些方格可以走,一些不能走; 然后问你从起点到终点,能不能在 ...
- 洛谷 P3178 BZOJ 4034 [HAOI2015]树上操作
题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 ...
- asp.net--CRSF
asp.net使用了token来防止CRSF攻击 前台: 使用@Html.AntiForgeryToken(); 浏览器里面被存了一个cookie值,这个值是asp.net存给浏览器的,是readon ...
- sync_binlog=1
MySQL提供一个sync_binlog参数来控制数据库的binlog刷到磁盘上去. sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新.这时候的性能 ...
- [jQuery]jQuery获取URL参数
// jQuery url get parameters function [获取URL的GET参数值]// <code>// var GET = $.urlGet(); //获取URL的 ...
- Oracle 使用sqlnet.ora/trigger限制/允许某IP或IP段访问指定用户
Oracle 使用sqlnet.ora/trigger限制/允许某IP或IP段访问指定用户 学习了:http://blog.itpub.net/28602568/viewspace-2092858/ ...
- 【函数式】Monads模式初探——Endofunctor
自函子 自函子(Endofunctor)是一个将范畴映射到自身的函子(A functor that maps a category to itself). 函子是将一个范畴转换到另一个范畴.所以自函子 ...
- 链接提交-js代码推送进化版
百度站长平台提供链接索引的自动提交JS脚本已经有一段时日了.用百度自己的话讲:JS链接推送代码以网页为最小对象,服务于全平台多终端,PC站和移动站均可使用.安装代码的页面在任意平台(浏览器.微信.微博 ...
- 仿支付宝/微信的password输入框效果GridPasswordView解析
仿支付宝/微信的password输入框效果GridPasswordView解析,把一些设置和一些关键的地方列了出来,方便大家使用,可能能够省一部分的时间,也算是自己的积累吧. 1.password框能 ...
- 1、应用设置之TAB页
转载请注明出处:http://blog.csdn.net/droyon/article/details/39891257 应用设置的TAB页,共分6页.如图 ...