NOI2012 美食节
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 美食节的更多相关文章
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- BZOJ 2879: [Noi2012]美食节 最小费用流 动态添边
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 324 Solved: 179[Submit][Status] ...
- BZOJ 2879: [Noi2012]美食节( 费用流 + 动态加边 )
倒着做菜..然后考虑为当前的人做菜对后面的人的影响就可以了..要动态加边 --------------------------------------------------------------- ...
- P2050 [NOI2012]美食节
题目地址:P2050 [NOI2012]美食节 先来讲一下P2053 [SCOI2007]修车(如果会做请跳过) 同一时刻有 \(N\) 位车主带着他们的爱车来到了汽车维修中心.维修中心共有 \(M\ ...
- 【BZOJ2879】[Noi2012]美食节 动态加边网络流
[BZOJ2879][Noi2012]美食节 Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食 ...
- P2050 [NOI2012]美食节(费用流)
P2050 [NOI2012]美食节 P2053 [SCOI2007]修车的加强版 因为数据较大,一次性把所有边都加完会T 于是我们每次只连需要的边跑费用流 就是开始先连所有厨师做倒数第1道菜 跑费用 ...
- 2879: [Noi2012]美食节 - BZOJ
Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...
- BZOJ 2879 NOI2012美食节
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2879 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M ...
- [BZOJ2879] [Noi2012] 美食节 (费用流 & 动态加边)
Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...
- [NOI2012]美食节(费用流)
题目描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽管所有的菜品都 ...
随机推荐
- 百度系统部 在 北京市海淀区西二旗首创空间大厦 招聘 Python-交付运维系统研发工程师 - 内推网(neitui.Me)
百度系统部 在 北京市海淀区西二旗首创空间大厦 招聘 Python-交付运维系统研发工程师 - 内推网(neitui.Me) 汪肴肴 (wa**@baidu.com) 发布了 Python-交付运维系 ...
- 如何断开eclipse与svn的链接
右键点击需要断开的项目 Team-->Disconnect 如果想删除svn配置文件,选择Also delete the SVN meta information from the file s ...
- IntelliJ IDEA常见问题及解决方法
1.IDEA导入项目后,源码.java文件图标带有红色圆圈,圆圈中间是个J: 该现象的原因是由于项目未把该路径指定为源码路径.解决方法: 在project Structure中(快捷键ctrl+alt ...
- Myeclipse自动生成javabean的get和set方法
用Myeclipse开发java web程序,写javabean的时候,如果字段很多的话,写get和set方法是一件很无语和浪费时间的事情,所以Myeclipse提供了一个自动生成这些方法的功能. 首 ...
- Android Sensor Test
魅蓝note可用 [{Sensor name="MPL Gyroscope", vendor="Invensense", version=1, type=4, ...
- [Typescript] Typescript Enums vs Booleans when Handling State
Handling state with Typescript enums, instead of booleans, is preferred because:- Enums are more rea ...
- debian linux 中如何查看软件包是否已经安装和如何安装、卸载软件
练习 1 方案:确定软件包是否安装 如果您不确定某个软件包是否已经安装,可以使用 dpkg 的 -l (L的小写) 选项: $ dpkg -l zsh No packages found matchi ...
- cocos2d-x 2.x 图层特效Effect(转)
CCSprite* sp = CCSprite::create("Default.png"); sp->setPosition(ccp(, )); addChild(sp); ...
- CentOS7--64安装python的psutil模块
1.以root身份登陆CentOS依次 执行以下命令: wget https://pypi.python.org/packages/source/p/psutil/psutil-2.1.3.tar.g ...
- 浏览器格式化JSON输出,thinkphp
1 //编写类方法用$this->ajaxReturn()返回数据 2 public function index(){ 3 $user = M('User'); 5 $data = $user ...