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价值每条购买毛巾, 当天 ...
随机推荐
- Python 实现 Excel 里单元格的读写与清空操作
#coding=utf-8 # coding=utf-8 作用是声明python代码的文本格式是utf-8,python按照utf-8的方式来读取程序. # 如果不加这个声明,无论代码中还是注释中有中 ...
- Docker 搭建 ELK 读取微服务项目的日志文件
思路: 在docker搭建elasticsearch与kibana来展示日志,在微服务部署的机子上部署logstash来收集日志传到elasticsearch中,通过kibana来展示,logstas ...
- VirtualBox没有权限访问共享文件夹
将用户添加至vboxsf组 命令: sudo adduser ly vboxsf 搞定!
- (20)Spring Boot Servlet【从零开始学Spring Boot】
Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet.Filter.Listener.Interceptor 等等. 当使用Spring-Boot时,嵌 ...
- elasticsearch 权威指南聚合阅读笔记(七)
count(1) select clssId,count(1) from student group by classId { "size":0, "aggs" ...
- [bzoj3932][CQOI2015]任务查询系统_主席树
任务查询系统 bzoj-3932 CQOI-2015 题目大意:最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述 ...
- 万众创业,互联网+,WTO
WTO的保护期,发展的非常繁荣.但大部分的资源都配置在了房地产这个支柱产业, 而被保护的行业小日子过得不错, 研发再投入?那是傻子才做的事情,别墅.豪车.美女.这才是生活. 但突然有一天,发现保护期要 ...
- windows XP下Python2.7包管理工具安装-setuptool,pip、distribute、nose、virtualenv
在Python开发中为了对项目进行管理和调试.必须安装一些特定的软件包.据说业内这个叫做yak shaving-做一个非常酷非常绚丽的Python项目之前,必须做的一些枯燥无味的准备工作.本文介绍了s ...
- A. Music(Codeforces Round #315 (Div. 2) 求最大的容纳量)
A. Music time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...
- pod install fatal: unable to access 'https://chromium.googlesource.com/webm/libwebp/'
1. 前往文件夹 /用户/aki/.cocoapods/repos/master/1/9/2/libwebp 2.编辑libwebp.podspec.json 将source git 改为 https ...