【bzoj2245】 SDOI2011—工作安排
http://www.lydsy.com/JudgeOnline/problem.php?id=2245 (题目链接)
题意
n个产品,每个需要造C[i]件;m个员工,每个员工可以制造一些产品;每个员工的愤怒值是关于制造产品数的递增分段函数。所有员工的愤怒值之和最少是多少。
Solution
按照题意连边构图,跑费用即可。
细节
开LL。
代码
// bzoj2245
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=100010;
struct edge {int from,to,next,w,c;}e[maxn*10];
int p[maxn],f[maxn],d[maxn],head[maxn],vis[maxn],s[maxn],T[300][300],w[300][300];
int n,m,cnt=1,es,et; void link(int u,int v,int w,int c) {
e[++cnt]=(edge){u,v,head[u],w,c};head[u]=cnt;
e[++cnt]=(edge){v,u,head[v],0,-c};head[v]=cnt;
}
LL SPFA() {
queue<int> q;
memset(f,0,sizeof(f));
memset(d,0x7f,sizeof(d));
q.push(es);d[es]=0;f[es]=inf;
while (!q.empty()) {
int x=q.front();q.pop();vis[x]=0;
for (int i=head[x];i;i=e[i].next) if (e[i].w && d[e[i].to]>d[x]+e[i].c) {
d[e[i].to]=d[x]+e[i].c;
f[e[i].to]=min(f[x],e[i].w);
p[e[i].to]=i;
if (!vis[e[i].to]) q.push(e[i].to),vis[e[i].to]=1;
}
}
if (f[et]==0) return 0;
for (int i=p[et];i;i=p[e[i].from]) e[i].w-=f[et],e[i^1].w+=f[et];
return (LL)f[et]*d[et];
}
LL EK() {
LL ans=0;
while (1) {
LL x=SPFA();
if (x==0) return ans;
ans+=x;
}
}
int main() {
scanf("%d%d",&m,&n);
es=10000;et=es+1;
for (int x,i=1;i<=n;i++) {
scanf("%d",&x);
link(i+m,et,x,0);
}
for (int i=1;i<=m;i++) link(es,i,inf,0);
for (int i=1;i<=m;i++)
for (int x,j=1;j<=n;j++) {
scanf("%d",&x);
if (x) link(n+m+i,j+m,inf,0);
}
for (int i=1;i<=m;i++) {
scanf("%d",&s[i]);
for (int j=1;j<=s[i];j++) scanf("%d",&T[i][j]);
for (int j=1;j<=s[i]+1;j++) scanf("%d",&w[i][j]);
for (int j=1;j<=s[i];j++) link(i,n+m+i,T[i][j]-T[i][j-1],w[i][j]);
link(i,n+m+i,inf,w[i][s[i]+1]);
}
printf("%lld",EK());
return 0;
}
【bzoj2245】 SDOI2011—工作安排的更多相关文章
- BZOJ2245 [SDOI2011]工作安排 【费用流】
题目 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被编号为1~m员工能够制造的产品种类有所区别.一件产品必须完整地由一名 ...
- [bzoj2245][SDOI2011]工作安排(费用流)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2245 分析: 要注意到题目下面说的w是单增的 明显的费用流: 弄个源点S,汇点T S连 ...
- bzoj2245: [SDOI2011]工作安排
费用流. 这道题的模型比较明显,拆点也是很容易看出来的. #include<cstdio> #include<algorithm> #include<cstring> ...
- [bzoj2245][SDOI2011]工作安排——费用流
题目大意: 传送门 题解: 很容易建模,把每一个工作人员拆成两个点,由第一个点向第二个点连S+1条边即可. 这水题没什么难度,主要是longlong卡的丧心病狂... 代码 #include < ...
- 【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]工作安排(最小费用最大流)
2245: [SDOI2011]工作安排 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1197 Solved: 580[Submit][Statu ...
- BZOJ 2245: [SDOI2011]工作安排( 费用流 )
费用流模板题..限制一下不同愤怒值的工作数就可以了. ------------------------------------------------------------------------- ...
- 【bzoj2245】[SDOI2011]工作安排 费用流
题目描述 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被编号为1~m员工能够制造的产品种类有所区别.一件产品必须完整地由 ...
随机推荐
- html post和get的区别
一直以来,都对这两个概念有一个感性的认识,今天总结一下: 1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据. 2.Get将表单中数据的按照variable=value的形式,添加 ...
- 布局 - layout
示例 <div id="cc" class="easyui-layout" style="width:600px;height:400px;&q ...
- zabbix常用术语
zabbix常用术语
- 小图标外链API
网页上有些分享的小图标,比如分享到facebook,weibo,qq空间等功能的时候,图标以前一般是自己做一个css sprite.当一个网站的图标变了的时候,比如facebook变成assbook的 ...
- 清北学堂2017NOIP冬令营入学测试
P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算一次成绩.参与享优惠 描述 这是一道有背 ...
- Ubuntu环境下安装TinyOS系统
1.输入下面命令会弹出source list窗口 1 sudo gedit /etc.apt/sources.list 在尾部添加以下地址: 1 2 deb http://tinyos.sta ...
- 数据契约(DataContract)及序列化指定输出字段
服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型. 一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所 ...
- 部署到IIS上的网站打开时总是显示无法找到资源解决方案
1.首先修改项目目录的访问权限:右键->属性->安全里面找到组名或用户名 ->编辑->添加一个用户取名everyOne并设置可以修改即可 2.然后在IIS下面,选中你的mvc项 ...
- ajax 跨域提交数据
$.ajax({ url:"http://my.demo.com/jsonp/server.php",//不同域的文件; cache: false, //是否使用缓存; error ...
- 如果在敲代码的时候eclipse不弹出提示,怎么办?
非常弱智的操作,我们曾经在输入System.out.println("content");的时候,当我们输入了"."之后,在输入错误,此时我们再回退至" ...