【BZOJ】【2879】【NOI2012】美食节
网络流/费用流
跟 BZOJ 1070 修车 几乎是一道题,只是这题“要修的车”(即菜)多了很多……几乎是从$n$变成了$n^2$,所以建图的时候就得动态加点……
也就是说,当一个厨师已经确定了他的后k道菜的时候,再加入表示倒数第k+1道菜的节点。
我个xx一开始写成了每次加一层……不 T 才怪……
加点过程看min_cost_flow(即mcf)这个函数吧,每次通过找流过来的节点,来确定要加的点。
- /**************************************************************
- Problem: 2879
- User: Tunix
- Language: C++
- Result: Accepted
- Time:7416 ms
- Memory:72872 kb
- ****************************************************************/
- //BZOJ 2879
- #include<cmath>
- #include<vector>
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- #include<iostream>
- #include<algorithm>
- #define rep(i,n) for(int i=0;i<n;++i)
- #define F(i,j,n) for(int i=j;i<=n;++i)
- #define D(i,j,n) for(int i=j;i>=n;--i)
- #define pb push_back
- #define CC(a,b) memset(a,b,sizeof(a))
- using namespace std;
- int getint(){
- int v=,sign=; char ch=getchar();
- while(!isdigit(ch)) {if(ch=='-') sign=-; ch=getchar();}
- while(isdigit(ch)) {v=v*+ch-''; ch=getchar();}
- return v*sign;
- }
- const int N=,M=,INF=~0u>>;
- const double eps=1e-;
- /*******************template********************/
- int n,m,ans,tot,tim[][],p[];
- struct edge{int from,to,v,c;};
- struct Net{
- edge E[M];
- int head[N],next[M],cnt;
- void ins(int x,int y,int z,int c){
- E[++cnt]=(edge){x,y,z,c};
- next[cnt]=head[x]; head[x]=cnt;
- }
- void add(int x,int y,int z,int c){
- ins(x,y,z,c); ins(y,x,,-c);
- }
- int from[N],Q[M],d[N],S,T,ed;
- bool inq[N],sign;
- bool spfa(){
- int l=,r=-;
- F(i,,T) d[i]=INF;
- d[S]=; Q[++r]=S; inq[S]=;
- while(l<=r){
- int x=Q[l++];
- inq[x]=;
- for(int i=head[x];i;i=next[i])
- if(E[i].v> && d[x]+E[i].c<d[E[i].to]){
- d[E[i].to]=d[x]+E[i].c;
- from[E[i].to]=i;
- if (!inq[E[i].to]){
- Q[++r]=E[i].to;
- inq[E[i].to]=;
- }
- }
- }
- return d[T]!=INF;
- }
- void mcf(){
- int x=INF,a,b;
- for(int i=from[T];i;i=from[E[i].from]){
- x=min(x,E[i].v);
- if (E[i].to==T){
- a=E[i].from%tot+;
- b=(E[i].from-)/tot;
- }
- }
- for(int i=from[T];i;i=from[E[i].from]){
- E[i].v-=x;
- E[i^].v+=x;
- }
- ans+=x*d[T];
- if (a!=)
- F(i,,n)
- add(i,b*tot+a,,a*tim[i][b]);
- }
- void init(){
- n=getint(); m=getint(); cnt=ed=; tot=;
- F(i,,n) {p[i]=getint(); tot+=p[i];}
- S=; T=tot+tot*m+;
- F(i,,n) F(j,,m) tim[i][j]=getint();
- F(i,,n) add(S,i,p[i],);
- F(i,tot+,tot+tot*m) add(i,T,,);
- F(i,,n)
- F(j,,m)
- add(i,j*tot+,,tim[i][j]);
- ans=;
- while(spfa()) mcf();
- printf("%d\n",ans);
- }
- }G1;
- int main(){
- #ifndef ONLINE_JUDGE
- freopen("2879.in","r",stdin);
- freopen("2879.out","w",stdout);
- #endif
- G1.init();
- return ;
- }
【BZOJ】【2879】【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]美食节( 费用流 + 动态加边 )
倒着做菜..然后考虑为当前的人做菜对后面的人的影响就可以了..要动态加边 --------------------------------------------------------------- ...
- BZOJ 2879 NOI2012美食节
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2879 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M ...
- BZOJ.2879.[NOI2012]美食节(费用流SPFA)
题目链接 /* 同"修车":对于每个厨师拆成p个点表示p个时间点,每个人向m个厨师每个时间点连边 这样边数O(nmp)+网络流 ≈O(nm*p^2)(假设SPFA线性) = GG ...
- BZOJ 2879 [Noi2012]美食节 | 费用流 动态开点
这道题就是"修车"的数据加强版--但是数据范围扩大了好多,应对方法是"动态开点". 首先先把"所有厨师做的倒数第一道菜"和所有菜连边,然后跑 ...
- 2879: [Noi2012]美食节 - BZOJ
Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...
- 【BZOJ】2879: [Noi2012]美食节
题意 \(m\)个厨师,\(n\)种菜,每种菜需要做\(p_i\)份,每个厨师做第\(i\)种菜用时\(t_{i, j}\).一个厨师做完一道菜才能做下一道.每份菜的时间是这个厨师做完这道菜的用时加上 ...
- 2879: [Noi2012]美食节
Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...
- 2879. [NOI2012]美食节【费用流】
Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...
随机推荐
- PHP JS判断浏览器,微信浏览器
微信内置浏览器的 User Agent 如何判断微信内置浏览器,首先需要获取微信内置浏览器的User Agent,经过在 iPhone 上微信的浏览器的检测,它的 User Agent 是: Mo ...
- SQL语句新建表,同时添加主键、索引、约束
SQL语句新建数据表 主键,索引,约束 CREATE TABLE [dbo].[T_SendInsideMessageRec]( [SendInsideMID] [uniqueidentifier ...
- 20141128—JavaScript对象
JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... String 对象的 length 属性来获得字符串的长度: var message="Hello World!& ...
- 《HTML5与CSS3基础教程》学习笔记 ——One Day
第一章 1. 邮箱地址的URL地址包括:mailto:+邮箱地址 2. ../表示向上走一级,开头直接使用/表示根目录 第三章 1. <header>: role = “ ...
- Essential C++ 学习笔记02--Array/Vector 与指针
Essential C++ 1.5-1.6节,3.1节笔记 Array/Vector/指针,难度偏大, 但若学习初期不熟悉基本用法,则难以写出有效代码. 1. 基本概念 Array 是一段连续内存,数 ...
- 通过Driver获取数据库连接
先看一下文件,在当前包下有一个properties配置文件,在根目录下有一个lib文件夹,里面放的是mySql的驱动jar包 Driver :是一个接口,数据库厂商必须提供实现的接口,能从其中获取数据 ...
- 图片剪裁上传插件 - cropper
图片剪裁上传插件 - cropper <style> .photo-container{float: left;width: 300px;height: 300px;} .photo-co ...
- 京东sdk商家上架接口调用问题总结(更新中...)
前言: 最近在做商家发布产品,调用京东sdk,发现问题很多,而且还是在我同事的帮助下完成的,摸索中,菜鸟还请高手门多多提携才好,入正题 首先是引用jd的sdk啦,京东sdk中发布商品需要调用一个 36 ...
- 前端自动化构建工具——gulp
gulp是基于流的前端自动化构建工具. 一.环境配置 gulp是基于nodejs的,所以没有 nodejs 环境的要先去安装好 然后给系统配上gulp环境 npm install -g gulp 再到 ...
- PHP实现链式操作的原理
在一个类中有多个方法,当你实例化这个类,并调用方法时只能一个一个调用,类似: db.php <?php class db{ public function where() { //code he ...