其实不用拆点,对于每个人我们假装他是\( s[i]+1 \)个点,可以由他向T点分别连\( s[i]+1 \)条边,容量为\( t[i][j]-t[i][j-1]\),由S点向所有产品i连容量为c[i]的边,由所有产品向能制造它的人连容量为inf的边。

因为是最小费用最大流,\( w[i][j]<w[i][j+1] \),所以会自动选择起点小的区间先流。

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const long long N=505,P=100005,inf=1e18;
long long m,n,c[N],a[N][N],s[N],t[N][10],w[N][10],S,T=1005,ans,fr[P],dis[P],h[P],cnt=1;
bool vis[P];
struct qwe
{
long long ne,no,to,va,c;
}e[P<<1];
long long read()
{
long long r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(long long u,long long v,long long w,long long c)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].no=u;
e[cnt].to=v;
e[cnt].va=w;
e[cnt].c=c;
h[u]=cnt;
}
void ins(long long u,long long v,long long w,long long c)
{
add(u,v,w,c);
add(v,u,0,-c);
}
bool spfa()
{
queue<long long>q;
for(int i=S;i<=T;i++)
dis[i]=inf;
vis[S]=1;
dis[S]=0;
q.push(S);
while(!q.empty())
{
long long u=q.front();
q.pop();
vis[u]=0;
for(int i=h[u];i;i=e[i].ne)
if(e[i].va>0&&dis[e[i].to]>dis[u]+e[i].c)
{
fr[e[i].to]=i;
dis[e[i].to]=dis[u]+e[i].c;
if(!vis[e[i].to])
{
vis[e[i].to]=1;
q.push(e[i].to);
}
}
}
return dis[T]!=inf;
}
void mcf()
{
long long x=inf;
for(int i=fr[T];i;i=fr[e[i].no])
x=min(x,e[i].va);
for(int i=fr[T];i;i=fr[e[i].no])
{
ans+=x*e[i].c;
e[i].va-=x;
e[i^1].va+=x;
}
}
int main()
{
m=read(),n=read();
for(int i=1;i<=n;i++)
{
c[i]=read();
ins(S,i,c[i],0);
}
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
a[i][j]=read();
if(a[i][j])
ins(j,i+n,inf,0);
}
for(int i=1;i<=m;i++)
{
s[i]=read();
for(int j=1;j<=s[i];j++)
t[i][j]=read();
t[i][s[i]+1]=inf;
for(int j=1;j<=s[i]+1;j++)
{
w[i][j]=read();
ins(i+n,T,t[i][j]-t[i][j-1],w[i][j]);
}
}
while(spfa())
mcf();
printf("%lld",ans);
return 0;
}
/*
2 3
2 2 2
1 1 0
0 0 1
1
2
1 10
1
2
1 6
*/

bzoj 2245 [SDOI2011]工作安排【最小费用最大流】的更多相关文章

  1. bzoj 2245 [SDOI2011]工作安排(最小费用最大流)

    2245: [SDOI2011]工作安排 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1197  Solved: 580[Submit][Statu ...

  2. BZOJ 2245: [SDOI2011]工作安排( 费用流 )

    费用流模板题..限制一下不同愤怒值的工作数就可以了. ------------------------------------------------------------------------- ...

  3. bzoj 2245: [SDOI2011]工作安排

    #include<cstdio> #include<iostream> #include<cstring> #define M 10000 #define inf ...

  4. 【BZOJ2245】[SDOI2011]工作安排(费用流)

    [BZOJ2245][SDOI2011]工作安排(费用流) 题面 BZOJ 洛谷 题解 裸的费用流吧. 不需要拆点,只需要连边就好了,保证了\(W_j<W_{j+1}\). #include&l ...

  5. 【BZOJ2245】[SDOI2011]工作安排 拆边费用流

    [BZOJ2245][SDOI2011]工作安排 Description 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被 ...

  6. [bzoj2245][SDOI2011]工作安排(费用流)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2245 分析: 要注意到题目下面说的w是单增的 明显的费用流: 弄个源点S,汇点T S连 ...

  7. BZOJ 1061 志愿者招募(最小费用最大流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1061 题意:申奥成功后,布布经过不懈努力,终于 成为奥组委下属公司人力资源部门的主管.布 ...

  8. bzoj 1070 [SCOI2007]修车(最小费用最大流)

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3515  Solved: 1411[Submit][Status] ...

  9. BZOJ 2668 [cqoi2012]交换棋子 | 最小费用最大流

    传送门 BZOJ 2668 题解 同时分别限制流入和流出次数,所以把一个点拆成三个:入点in(x).中间点mi(x).出点ou(x). 如果一个格子x在初始状态是黑点,则连(S, mi(x), 1, ...

随机推荐

  1. php桥接模式

    php桥接模式 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化. 示例:当一个信息时根据发送渠道分为:QQ消息.email消息.短信消息等根据消息类型分为:普通.警告.危急等每种消息都 ...

  2. freeswitch对媒体的处理的三种方式

    一.默认方式:媒体通过freeswitch, RTP被freeswtich转发, freeswitch控制编码的协商并在协商不一致时提供语音编码转换能力, 支持录音,二次拨号等.   二.代理模式: ...

  3. Spring事务管理概述

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/transaction-management.html: 数据库事务是一个被视为单一的工作单元的操作 ...

  4. VS2012关于hash_map的使用简略

    VS关于hash_map使用的一些经常使用构造方法汇总,包含基本类型和结构体,相信够一般模仿使用: # include<hash_map> #include<iostream> ...

  5. 使用VLC搭建视频直播服务器

    去年我们信息之夜我们进行过视频直播服务,当时我们使用了WMS(Windows Media Server)实现了这个服务,但是编码是微软的WMV,因而像iPhone/Android这样的智能手机无法观看 ...

  6. 鸟哥的Linux私房菜-----12、学习使用Shell scripts

  7. web前端开发 代码规范 及注意事项

    web前端开发 代码规范 及注意事项 外部命名规范 html .js .css文件名称命名规范 my_script.js my_camel_case_name.css my_index.html 路径 ...

  8. [读书笔记]《没人会告诉你的PPT真相》

    这本书分了三部分.第一部分偏重于基础技能,其中分为三部分,打印.放映.保存.第二部分是进阶,分为模板下载.模板修改.增加自定义页面等.第三部分是打造商业范的PPT,分为商业范的特征,具体技能体现(重复 ...

  9. ubuntu中查看已安装软件包的方法

    ubuntu中查看已安装软件包的方法: 方法一:在新立得软件包管理器中,打到已安装,便可以看看有多少包被安装. 如果想把这些包的信息复制到一文件里,可用下面的方法. 方法二:在终端输入 sudo dp ...

  10. bzoj1486【HNOI2009】最小圈

    1486: [HNOI2009]最小圈 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1778  Solved: 827 [Submit][Statu ...