http://www.lydsy.com/JudgeOnline/problem.php?id=2879

费用流。

我们发现,每个厨师做的倒数第k道菜对总等待时间的贡献为k*做这道菜的时间。

将每个厨师拆成P个点,第i个第表示这个厨师做倒数第i道菜。

设Vi,j表示第i个厨师做第j道菜的点。

Ui表示第i道菜。

构图:

S->Vi,j一条流量为1,费用为0的边;

Vi,j->Uk一条流量为1,费用为j*t[k][i]的边;

Ui->T一条流量为p[i],费用为0的边。

但是数据范围比较大,我们可以动态加边。

友情题:SDOI2007修车

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<utility>
#include<set>
#include<bitset>
#include<vector>
#include<functional>
#include<deque>
#include<cctype>
#include<climits>
#include<complex>
//#include<bits/stdc++.h>适用于CF,UOJ,但不适用于poj using namespace std; typedef long long LL;
typedef double DB;
typedef pair<int,int> PII;
typedef complex<DB> CP; #define mmst(a,v) memset(a,v,sizeof(a))
#define mmcy(a,b) memcpy(a,b,sizeof(a))
#define re(i,a,b) for(i=a;i<=b;i++)
#define red(i,a,b) for(i=a;i>=b;i--)
#define fi first
#define se second
#define m_p(a,b) make_pair(a,b)
#define SF scanf
#define PF printf
#define two(k) (1<<(k)) template<class T>inline T sqr(T x){return x*x;}
template<class T>inline void upmin(T &t,T tmp){if(t>tmp)t=tmp;}
template<class T>inline void upmax(T &t,T tmp){if(t<tmp)t=tmp;} const DB EPS=1e-;
inline int sgn(DB x){if(abs(x)<EPS)return ;return(x>)?:-;}
const DB Pi=acos(-1.0); inline int gint()
{
int res=;bool neg=;char z;
for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
if(z==EOF)return ;
if(z=='-'){neg=;z=getchar();}
for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
return (neg)?-res:res;
}
inline LL gll()
{
LL res=;bool neg=;char z;
for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
if(z==EOF)return ;
if(z=='-'){neg=;z=getchar();}
for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
return (neg)?-res:res;
} const int maxN=;
const int maxM=;
const int maxP=;
const int INF=<<; int N,M,P;
int p[maxN+];
int t[maxN+][maxM+];
int S,T,now,first[maxN+maxM*maxP+];
struct Tedge{int u,v,flow,cost,next;}edge[*(maxN+maxN*maxM*maxP+maxP*maxM)+]; inline void addedge(int u,int v,int flow,int cost)
{
now++;
edge[now].u=u;
edge[now].v=v;
edge[now].flow=flow;
edge[now].cost=cost;
edge[now].next=first[u];
first[u]=now;
}
inline void insert(int u,int v,int flow,int cost){addedge(u,v,flow,cost);addedge(v,u,,-cost);} int head,tail,que[maxN+maxM*maxP+];
int vis[maxN+maxM*maxP+],dis[maxN+maxM*maxP+],fromedge[maxN+maxM*maxP+];
inline int SPFA()
{
int i;
re(i,,N+P*M+)vis[i]=,dis[i]=INF,fromedge[i]=-;
dis[que[]=S]=;
head=;tail=;
vis[S]=;
while(head!=tail)
{
int u=que[head++],v,flow,cost;if(head==T)head=;
vis[u]=;
for(i=first[u],v=edge[i].v,flow=edge[i].flow,cost=edge[i].cost;i!=-;i=edge[i].next,v=edge[i].v,flow=edge[i].flow,cost=edge[i].cost)
if(flow> && dis[u]+cost<dis[v])
{
dis[v]=dis[u]+cost;
fromedge[v]=i;
if(!vis[v])
{
vis[que[tail]=v]=;
if(dis[que[tail]]<dis[que[head]])swap(que[head],que[tail]);
tail++;if(tail==T)tail=;
}
}
}
return dis[T]!=INF;
}
inline void work(int &res)
{
int i,x=INF,y,a,b;
for(i=fromedge[T];i!=-;i=fromedge[edge[i].u])
{
upmin(x,edge[i].flow);
if(edge[i].u==S)y=edge[i].v,a=(y-)/P+,b=y%P+;
}
for(i=fromedge[T];i!=-;i=fromedge[edge[i].u])edge[i].flow-=x,edge[i^].flow+=x,res+=x*edge[i].cost;
re(i,,N)insert((a-)*P+b,P*M+i,,b*t[i][a]);
}
inline int mincostmaxflow()
{
int res=;
while(SPFA())work(res);
return res;
} int main()
{
freopen("delicacy.in","r",stdin);
freopen("delicacy.out","w",stdout);
int i,j;
N=gint();M=gint();
mmst(first,-);now=-;
re(i,,N)p[i]=gint(),P+=p[i];
re(i,,N)re(j,,M)t[i][j]=gint();
S=;T=P*M+N+;
re(i,,P*M)insert(S,i,,);
re(i,,N)insert(P*M+i,T,p[i],);
re(i,,N)re(j,,M)insert((j-)*P+,P*M+i,,t[i][j]);
cout<<mincostmaxflow()<<endl;
return ;
}

NOI2012 美食节的更多相关文章

  1. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  2. BZOJ 2879: [Noi2012]美食节 最小费用流 动态添边

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 324  Solved: 179[Submit][Status] ...

  3. BZOJ 2879: [Noi2012]美食节( 费用流 + 动态加边 )

    倒着做菜..然后考虑为当前的人做菜对后面的人的影响就可以了..要动态加边 --------------------------------------------------------------- ...

  4. P2050 [NOI2012]美食节

    题目地址:P2050 [NOI2012]美食节 先来讲一下P2053 [SCOI2007]修车(如果会做请跳过) 同一时刻有 \(N\) 位车主带着他们的爱车来到了汽车维修中心.维修中心共有 \(M\ ...

  5. 【BZOJ2879】[Noi2012]美食节 动态加边网络流

    [BZOJ2879][Noi2012]美食节 Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食 ...

  6. P2050 [NOI2012]美食节(费用流)

    P2050 [NOI2012]美食节 P2053 [SCOI2007]修车的加强版 因为数据较大,一次性把所有边都加完会T 于是我们每次只连需要的边跑费用流 就是开始先连所有厨师做倒数第1道菜 跑费用 ...

  7. 2879: [Noi2012]美食节 - BZOJ

    Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...

  8. BZOJ 2879 NOI2012美食节

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2879 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M ...

  9. [BZOJ2879] [Noi2012] 美食节 (费用流 & 动态加边)

    Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...

  10. [NOI2012]美食节(费用流)

    题目描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽管所有的菜品都 ...

随机推荐

  1. ORACLE归档模式和非归档模式的利与弊

    转: 在Oracle数据库中,主要有两种日志操作模式,分别为非归档模式与归档模式.默认情况下,数据库采用的是非归档模式.作为一个合格的数据库管理员,应当深入了解这两种日志操作模式的特点,并且在数据库建 ...

  2. iOS面试题大全-点亮你iOS技能树

    所有的内容大部分来自于网络的搜集,所以我不是一个创造者,而是一个搬运工.我尽量把题目,尤其是参考答案的出处列明.若有任何疑问,建议,意见,请联系我. 第一部分面试题来源于iOS-Developer-I ...

  3. 验证合法的url

    package test; import java.util.regex.Matcher;import java.util.regex.Pattern; public class Test { pub ...

  4. openstack单元測试用组件一览

    声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! 组件一览 hacking 一 ...

  5. [ES6] Export class and variable

    Export variable: export const MAX_USERS = 3; export const MAX_REPLIES = 3; Export default class: exp ...

  6. Lenovo k860i 移植Android 4.4 cm11进度记录【下篇--实时更新中】

    2014.8.24 k860i的cm11的移植在中断了近两三个月之后又開始继续了,进度记录的日志上一篇已经没什么写的了,就完结掉它吧,又一次开一篇日志做下篇好了.近期的战况是,在scue同学的努力之下 ...

  7. C#。5 函数 类

    函数:能够独立完成某个功能的模块.          好处:1.结构更清析(编写.维护方便 ).2.代码重用.3.分工开发.          四要素:名称,输入(参数),输出(返回的类型),加工(函 ...

  8. Node.js中的exports与module.exports的区分

    1. module应该是require方法中,上下文中的对象 2. exports对象应该是上下文中引用module.exports的新对象 3. exports.a = xxx 会将修改更新到mod ...

  9. hdu 1076

    水题 AC代码: #include <iostream> using namespace std; int main() { int i,k,t,y,n; cin>>t; wh ...

  10. datagrid的基本操作-增删改

    1 ---恢复内容开始--- <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...