[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 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单 ...
随机推荐
- Vim 不区分大小写
Vim 不区分大小写 忽略:set ignorecase 恢复:set noignorecase
- 5个步骤,教你瞬间明白线程和线程安全.md
记得刚来杭州面试的时候,有一家公司的技术总监问了我这样一个问题:你来说说有哪些线程安全的类?我心里一想,这我早都背好了,稀里哗啦说了一大堆. 他又接着问:那你再来说说什么是线程安全?--然后我就GG了 ...
- SpringCloud 2020.0.4 系列之 Feign
1. 概述 老话说的好:任何问题都有不止一种的解决方法,当前的问题没有解决,只是还没有发现解决方法,而并不是无解. 言归正传,之前我们聊了 SpringCloud 的服务治理组件 Eureka,今天我 ...
- Coursera Deep Learning笔记 结构化机器学习项目 (下)
参考:https://blog.csdn.net/red_stone1/article/details/78600255https://blog.csdn.net/red_stone1/article ...
- Spring Cloud Gateway Route Predicate Factory 的使用
Spring Cloud Gateway的使用 一.需求 二.基本组成 1.简介 2.核型概念 1.Route 路由 2.Predicate 谓语.断言 3.Filter 过滤器 3.工作原理 三.网 ...
- 单片机STM32在开发中常用库函数详解
1.GPIO初始化函数 用法: voidGPIO_Configuration(void) { GPIO_InitTypeDefGPIO_InitStructure;//GPIO状态恢复默认参数 GPI ...
- 今天学习了BootStrap
今天学习了BootStrap 一.BootStrap介绍 Bootstrap是一个前端开发的框架,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.Java ...
- WPF实现统计图
WPF开发者QQ群: 340500857 | 微信群 -> 进入公众号主页 加入组织 前言 有小伙伴提出需要实现统计图. 由于在WPF中没有现成的统计图控件,所以我们自己实现一个. PS:有更 ...
- 攻防世界 WEB 高手进阶区 unserialize3 Writeup
攻防世界 WEB 高手进阶区 unserialize3 Writeup 题目介绍 题目考点 PHP反序列化 __wakeup漏洞 Writeup 题名 unserialize 是反序列化函数名 了解一 ...
- PAT甲级1074 Reversing Linked List (25分)
[程序思路] 先根据地址按顺序读入节点,入栈,当栈里的元素个数等于k时全部出栈,并按出栈顺序保存,最后若栈不为空,则全部出栈并按出栈的稀饭顺序保存,最后输出各节点 注意:输入的节点中有可能存在无用节点 ...