放个链接

BZ链接

其实这题就是修车的加强版,做法差不多,还是对于每个厨师进行拆点

可是这样强行建图跑网络流会T飞

我们发现,如果一个厨师没有做倒数第x到菜,他一定不会做倒数第x+1到菜

我们的每次增广表示有厨师的倒数第k道菜做了y,这样我们把这位厨师的倒数做k+1道菜的边连起来

动态加边

连边是注意每个点的意思是什么

# include<iostream>
# include<cstdio>
# include<algorithm>
# include<cmath>
# include<cstring>
# include<queue>
using namespace std;
const int inf = 0x3f3f3f3f;
const int mn = ;
int c[][],p[];
struct edge{int to,next,flow,cost;};
edge e[];
int head[mn],edge_max=;
void add(int x,int y,int z,int k)
{
//printf("%d %d %d %d\n",x,y,z,k);
e[++edge_max].to=y;
e[edge_max].flow=z;
e[edge_max].cost=k;
e[edge_max].next=head[x];
head[x]=edge_max;
}
int n,m,sum;
int dis[mn],pe[mn],pv[mn],ansc,ansf;
bool vis[mn];
queue<int> q;
bool spfa(int x,int y)
{
memset(dis,0x3f,sizeof(dis));
dis[x]=;
q.push(x);
while(!q.empty())
{
int u=q.front();
vis[u]=;
q.pop();
for(int i=head[u];i;i=e[i].next)
{
if(e[i].flow> && e[i].cost+dis[u]<dis[e[i].to])
{
dis[e[i].to]=dis[u]+e[i].cost;
pv[e[i].to]=u;
pe[e[i].to]=i;
if(!vis[e[i].to])
{
vis[e[i].to]=;
q.push(e[i].to);
}
}
}
}
//for(int i=0;i<=y;i++)
//printf("%d ",dis[y]);
return dis[y]<inf;
}
void max_flow(int x,int y)
{
int kflow,a,b;//a表示厨师编号
while(spfa(x,y))
{
//printf("%d %d\n",ansc,ansf);
kflow=inf;
for(int i=y;i!=x;i=pv[i])
kflow=min(kflow,e[pe[i]].flow);
a=(pv[y]-)/sum+;
b=pv[y]%sum+;
ansf+=kflow;
ansc+=kflow*dis[y];
for(int i=y;i!=x;i=pv[i])
{
e[pe[i]].flow-=kflow;
e[pe[i]^].flow+=kflow;
//ansc+=kflow*e[pe[i]].cost;
}
for(int i=;i<=n;i++)
add(i+m*sum,(a-)*sum+b,,c[i][a]*b),add((a-)*sum+b,i+m*sum,,-c[i][a]*b);
}
}
int main()
{
int st=;
//freopen("testdata.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&p[i]),sum+=p[i];
int en=sum*m+n+;
// printf("%d\n",en);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&c[i][j]);
for(int i=;i<=n;i++)
add(st,i+m*sum,p[i],),add(i+m*sum,st,,);
for(int i=;i<=m*sum;i++)
add(i,en,,),add(en,i,,);
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
add(j+m*sum,(i-)*sum+,,c[j][i]),add((i-)*sum+,j+m*sum,,-c[j][i]);
max_flow(st,en);
printf("%d",ansc);
return ;
}

洛谷2050 BZOJ2897美食节题解的更多相关文章

  1. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  2. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  3. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  4. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  5. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  6. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  7. 【洛谷2050】 [NOI2012]美食节(费用流)

    大家可以先看这道题目再做! SCOI2007修车 传送门 洛谷 Solution 就和上面那道题目一样的套路,但是发现你会获得60~80分的好成绩!!! 考虑优化,因为是SPFA,所以每一次只会走最短 ...

  8. 【洛谷P3410】拍照题解(最大权闭合子图总结)

    题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...

  9. [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)

    [BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...

随机推荐

  1. Java SE、Java EE、Java ME三者的区别

    1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...

  2. eclipse中运行java程序

    1 package ttt; public class Testttt { public static void main() { Person p =new Person(); p.name=&qu ...

  3. Oracle VM VirtualBox安装增强功能和共享文件夹的方法

    一.介绍下如何安装增强功能 1)选择安装增强功能的安装包有2种方法,分别如下: 第一种:找到设备->安装增强功能 第二种 1)找到设备->点击选择虚拟盘. 2)找到VirtualBox-& ...

  4. c++设计模式:单例模式

    1.设计思想: 单例模式,顾名思义,即一个类只有一个实例对象.C++一般的方法是将构造函数.拷贝构造函数以及赋值操作符函数声明为private级别,从而阻止用户实例化一个类.那么,如何才能获得该类的对 ...

  5. wamp 添加pear

    1.下载pear http://pear.php.net/go-pear.phar 2.安装 在目录 D:\wamp\bin\php\php5.5.12 新建文件夹pear,将文件go-pear.ph ...

  6. [转]文件file属性详解

    不能直接访问用户计算机中的文件,一直都是Web应用开发中的一大障碍.2000年以前,处理文件的唯一方式就是在表单中加入<input type="file">字段,仅此而 ...

  7. java 的安装

    下载 java的官方下载地址:https://www.java.com/zh_CN/ 安装 下载完成后,可以按照默认安装路径,也可以自行设置安装路径.例如我的安装路径为:D:\Program File ...

  8. GIT → 00:GIT学习大纲

    1. 学习版本控制的原因 1.1 没有版本控制出现的问题 1.2 版本控制的简介 1.3 版本控制工具 2. Git 和 Svn 比较 2.1 SVN介绍 2.1.1 SVN简介 2.1.2 SVN基 ...

  9. 从Java到C++——union的使用方法

    版权声明:本文为博主原创文章,未经博主同意不得用于不论什么商业用途,转载请注明出处. https://blog.csdn.net/luoweifu/article/details/33342965 你 ...

  10. Vue. 之 npm安装 axios

    Vue. 之 npm安装 axios 使用指令: cnpm install axios