bzoj2245: [SDOI2011]工作安排
费用流。
这道题的模型比较明显,拆点也是很容易看出来的。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1000 + 10;
const int maxm = 500000 + 10;
const int inf = 0x3f3f3f3f;
int g[maxn],v[maxm],f[maxm],c[maxm],next[maxm],eid;
int idn[maxn],idm[maxn];
int a[maxn][5];
int n,m,S,T,vid,u;
int d[maxn],pre[maxn];
int q[maxn],l,r;
bool inque[maxn]; void addedge(int a,int b,int F,int C) {
v[eid]=b; f[eid]=F; c[eid]=C; next[eid]=g[a]; g[a]=eid++;
v[eid]=a; f[eid]=0; c[eid]=-C; next[eid]=g[b]; g[b]=eid++;
} void build() {
memset(g,-1,sizeof(g));
scanf("%d%d",&n,&m);
S=1; T=2;
vid=2;
for(int i=1,t;i<=m;i++) {
idm[i]=++vid;
scanf("%d",&t);
addedge(S,idm[i],t,0);
}
for(int i=1;i<=n;i++) {
idn[i]=++vid;
for(int j=1,t;j<=m;j++) {
scanf("%d",&t);
if(t==1) addedge(idm[j],idn[i],inf,0);
}
}
for(int i=1,t;i<=n;i++) {
scanf("%d",&t);
for(int j=1;j<=t;j++) scanf("%d",&a[j][1]);
a[t+1][1]=inf;
for(int j=1;j<=t+1;j++) scanf("%d",&a[j][2]);
for(int j=1;j<=t+1;j++)
addedge(idn[i],T,a[j][1]-a[j-1][1],a[j][2]);
}
} bool SPFA() {
memset(d,0xe3f,sizeof(d));
d[S]=0; l=r=0;
inque[q[r++]=S]=1;
while(l<r) {
inque[u=q[l++]]=0;
for(int i=g[u];~i;i=next[i]) if(f[i] && d[v[i]]>d[u]+c[i]) {
d[v[i]]=d[u]+c[i];
pre[v[i]]=i;
if(!inque[v[i]]) {
inque[q[r++]=v[i]]=1;
}
}
}
return d[T]<inf;
} int augment() {
int aug=inf,res=0;
for(int i=T;i!=S;i=v[pre[i]^1]) {
aug=min(aug,f[pre[i]]);
}
for(int i=T;i!=S;i=v[pre[i]^1]) {
f[pre[i]]-=aug;
f[pre[i]^1]+=aug;
res+=c[pre[i]]*aug;
}
return res;
} void solve() {
long long res=0;
while(SPFA()) res+=augment();
printf("%lld\n",res);
} int main() {
build();
solve();
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]工作安排——费用流
题目大意: 传送门 题解: 很容易建模,把每一个工作人员拆成两个点,由第一个点向第二个点连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员工能够制造的产品种类有所区别.一件产品必须完整地由 ...
- 【bzoj2245】 SDOI2011—工作安排
http://www.lydsy.com/JudgeOnline/problem.php?id=2245 (题目链接) 题意 n个产品,每个需要造C[i]件:m个员工,每个员工可以制造一些产品:每个员 ...
随机推荐
- 瞧一瞧,看一看呐,用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!!
瞧一瞧,看一看呐用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!! 现在要写的呢就是,用MVC和EF弄出一个CRUD四个页面和一个列表页面的一个快速DEMO,当然是在不 ...
- Fixing:insert_modules not found
搞linux的最怕的就是panic.满屏的报错不知头绪,百度出来的还都是抄来抄去的垃圾. 我遇到的错误已经解决,所以不想再看到报错了..google出来两个没有上下文的文本,因为和他们差不多,在下面贴 ...
- oracle 插入timestamp
示例: insert into tpurview(IPURVIEWID,CPURVIEWNAME,COPERATENAME,IPARENTID,DADDTIME,DEDITTIME,CADDUSER, ...
- Codeforces Round #240 (Div. 2)->A. Mashmokh and Lights
A. Mashmokh and Lights time limit per test 1 second memory limit per test 256 megabytes input standa ...
- String 内在分配解析
1.String类概念 (1)String是final的,不可被继承.public final class String.String是的本质是字符数组char[], 并且其值不可改变.private ...
- Java学习第四篇:数组,排序,查找
一.数组 1.一维数组 (1).数组的定义 数据类型 数组名[]=new 数据类型[大小] public class Demo1 { public static void main(String[] ...
- Graham's Scan算法
原文链接:http://www.cnblogs.com/devymex/archive/2010/08/09/1795392.html C++/STL实现: #include <algorith ...
- hdu 1242 Rescue(BFS,优先队列,基础)
题目 /******************以下思路来自百度菜鸟的程序人生*********************/ bfs即可,可能有多个’r’,而’a’只有一个,从’a’开始搜,找到的第一个’r ...
- *[hackerrank]Die Hard 3
https://www.hackerrank.com/contests/w7/challenges/die-hard-3 首先,发现c <= max(a, b) 而且 c = aX + bY时有 ...
- React组件测试(模拟组件、函数和事件)
一.模拟组件 1.用到的工具 (1)browerify (2)jasmine-react-helpers (3)rewireify(依赖注入) (4)命令:browserify - t reactif ...