[bzoj2245]工作安排
由于价格是单调递增的,因此可以直接建立Si条边,流量和价格依次为给定的函数即可
(如果价格不递增,可以考虑动态加边等操作)

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 1005
4 struct ji{
5 int nex,to,len,cost;
6 }edge[N*N];
7 queue<int>q;
8 int E,n,m,x,y,head[N],d[N],from[N],vis[N];
9 long long ans;
10 void add(int x,int y,int z,int w){
11 edge[E].nex=head[x];
12 edge[E].to=y;
13 edge[E].len=z;
14 edge[E].cost=w;
15 head[x]=E++;
16 if (E&1)add(y,x,0,-w);
17 }
18 bool spfa(){
19 memset(d,0x3f,sizeof(d));
20 memset(vis,0,sizeof(vis));
21 q.push(0);
22 d[0]=0;
23 while (!q.empty()){
24 int k=q.front();
25 q.pop();
26 for(int i=head[k];i!=-1;i=edge[i].nex)
27 if ((edge[i].len)&&(d[edge[i].to]>d[k]+edge[i].cost)){
28 d[edge[i].to]=d[k]+edge[i].cost;
29 from[edge[i].to]=i;
30 if (!vis[edge[i].to]){
31 vis[edge[i].to]=1;
32 q.push(edge[i].to);
33 }
34 }
35 vis[k]=0;
36 }
37 return d[n+m+1]<0x3f3f3f3f;
38 }
39 int main(){
40 scanf("%d%d",&n,&m);
41 memset(head,-1,sizeof(head));
42 for(int i=1;i<=m;i++){
43 scanf("%d",&x);
44 add(i+n,n+m+1,x,0);
45 }
46 for(int i=1;i<=n;i++)
47 for(int j=1;j<=m;j++){
48 scanf("%d",&x);
49 if (x)add(i,j+n,0x3f3f3f3f,0);
50 }
51 for(int i=1;i<=n;i++){
52 scanf("%d",&x);
53 for(int j=1;j<=x;j++)scanf("%d",&d[j]);
54 d[x+1]=0x3f3f3f3f;
55 for(int j=0;j<=x;j++){
56 scanf("%d",&y);
57 add(0,i,d[j+1]-d[j],y);
58 }
59 }
60 while (spfa()){
61 x=0x3f3f3f3f;
62 for(int i=n+m+1;i;i=edge[from[i]^1].to)x=min(x,edge[from[i]].len);
63 ans+=1LL*x*d[n+m+1];
64 for(int i=n+m+1;i;i=edge[from[i]^1].to){
65 edge[from[i]].len-=x;
66 edge[from[i]^1].len+=x;
67 }
68 }
69 printf("%lld",ans);
70 }
[bzoj2245]工作安排的更多相关文章
- 【BZOJ2245】[SDOI2011]工作安排(费用流)
[BZOJ2245][SDOI2011]工作安排(费用流) 题面 BZOJ 洛谷 题解 裸的费用流吧. 不需要拆点,只需要连边就好了,保证了\(W_j<W_{j+1}\). #include&l ...
- 【BZOJ2245】[SDOI2011]工作安排 拆边费用流
[BZOJ2245][SDOI2011]工作安排 Description 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被 ...
- 【BZOJ】【2245】【SDOI2011】工作安排
网络流/费用流 裸题吧……直接建模就好了……所谓的“分段函数”就是吓唬你的,其实就是对于每个人分开建几条流量不同.费用不同的弧而已. 对每种产品,连S->i ,(c[i],0):对每个工作人员 ...
- lemon OA 下阶段工作安排
lemon OA 下阶段工作安排 经验总结 lemon OA系统作为一个中型的java web系统,在架构上还是有着很好地可学习的地方.但是由于经验不足,过程比较迂回.如果真的有经验的话,应该可以做到 ...
- BZOJ1572: [Usaco2009 Open]工作安排Job
1572: [Usaco2009 Open]工作安排Job Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 775 Solved: 337[Submit ...
- bzoj 2245 [SDOI2011]工作安排(最小费用最大流)
2245: [SDOI2011]工作安排 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1197 Solved: 580[Submit][Statu ...
- BZOJ 2245: [SDOI2011]工作安排( 费用流 )
费用流模板题..限制一下不同愤怒值的工作数就可以了. ------------------------------------------------------------------------- ...
- BZOJ 1572: [Usaco2009 Open]工作安排Job( 贪心 )
贪心... 按截止时间排序 , 然后从小到大考虑 . 假设当前考虑第 i 个任务 , 若目前已选工作数 < D_i , 那就选 i ; 否则 若已选工作中利润最小的比 P_i 小 , 那就去除它 ...
- 【BZOJ 1572】 1572: [Usaco2009 Open]工作安排Job(贪心+优先队列)
1572: [Usaco2009 Open]工作安排Job Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单 ...
随机推荐
- Java数据类型详解!Java秘诀,Java入门基础
Java的基本数据类型算是Java学习的基础之一,经常会听到大家提起.那么你到底有没有真正理解和掌握数据类型呢? Java 语言支持的数据类型分为两种:基本数据类型和引用数据类型!本文主要针对这两大数 ...
- SpringBoot入门05-全局配置文件
springboot全局配置文件作用是设置或修改默认设置 springboot全局配置文件有下面两种方式 application.xml配置文件 示例 server.port=8088 server. ...
- 用C++实现的数独解题程序 SudokuSolver 2.1 及实例分析
SudokuSolver 2.1 程序实现 在 2.0 版的基础上,2.1 版在输出信息上做了一些改进,并增加了 runtil <steps> 命令,方便做实例分析. CQuizDeale ...
- linux中文件查找、whereis、which、输出命令
1.文件查找(find):find是最常⻅和最强⼤的查找命令 格式:find / -name 文件名,比如:find / -name mysql. (1).模糊查找:*是代表所有的,?是代表⼀个字 ...
- Go语言核心36讲(Go语言进阶技术六)--学习笔记
12 | 使用函数的正确姿势 在前几期文章中,我们分了几次,把 Go 语言自身提供的,所有集合类的数据类型都讲了一遍,额外还讲了标准库的container包中的几个类型. 在几乎所有主流的编程语言中, ...
- 看动画学算法之:队列queue
目录 简介 队列的实现 队列的数组实现 队列的动态数组实现 队列的链表实现 队列的时间复杂度 简介 队列Queue是一个非常常见的数据结构,所谓队列就是先进先出的序列结构. 想象一下我们日常的排队买票 ...
- Scrum Meeting 15
第15次例会报告 日期:2021年06月09日 会议主要内容概述: 开发工作接近尾声,接下来两天重点放在单元测试.调CSS和增加数据集数量上. 一.进度情况 我们采用日报的形式记录每个人的具体进度,链 ...
- AGC019F
题目大意 $n$ + $m$ 个问题,其中$n$ 个答案是$YES$,$m$个是$NO$的,你依次答题,每答一道,就可以立刻知道这道题的答案,求在最优策略下答错次数的期望,对$998244353$取模 ...
- Django(71)图片处理器django-imagekit
介绍 ImageKit是用于处理图像的Django应用程序.如果需要从原图上生成一个长宽为50x50的图像,则需要ImageKit. ImageKit附带了一系列图像处理器,用于调整大小和裁剪等常见任 ...
- greenplum分布键的hash值计算分析
greenplum 数据分布策略 greenplum 是一个 MPP 架构的数据库,由一个 master 和多个 segment 组成(还可选配置一个 standby master),其数据会根据设置 ...