洛谷2050 BZOJ2897美食节题解
其实这题就是修车的加强版,做法差不多,还是对于每个厨师进行拆点
可是这样强行建图跑网络流会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美食节题解的更多相关文章
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- 洛谷P1577 切绳子题解
洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- 洛谷 P1220 关路灯 题解
Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...
- 【洛谷2050】 [NOI2012]美食节(费用流)
大家可以先看这道题目再做! SCOI2007修车 传送门 洛谷 Solution 就和上面那道题目一样的套路,但是发现你会获得60~80分的好成绩!!! 考虑优化,因为是SPFA,所以每一次只会走最短 ...
- 【洛谷P3410】拍照题解(最大权闭合子图总结)
题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...
- [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)
[BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...
随机推荐
- substring() 方法用于提取字符串中介于两个指定下标之间的字符。
substring() 方法用于提取字符串中介于两个指定下标之间的字符. 语法 stringObject.substring(start,stop) 参数 描述 start 必需.一个非负的整数,规定 ...
- Spring Cloud Consul综合整理
该项目通过自动配置和Spring环境以及其他Spring编程模型习惯用法提供了Spring Boot应用程序的Consul集成. 通过一些简单的注释,您可以快速启用和配置应用程序内的通用模式,并使用基 ...
- 玩转vue的slot内容分发
vue的内容分发非常适合"固定部分+动态部分"的组件的场景,固定部分可以是结构固定,也可以是逻辑固定,比如下拉loading,下拉loading只是中间内容是动态的,而拉到底部都会 ...
- 11.5 临近csp·道别
差不多到写这个东西的时候了? 嗯,按今天的日期来算的话,还有不到十天就是csp.感觉对我这种家伙来说应该算是终结了? 放在之前的话肯定会写很多东西的,不过现在大约有点不知道写什么比较合适. 所以只是祝 ...
- 1.appium工作原理及环境搭建
1.appium: 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用. 2.工作原理: 3.搭建appium环境: (1)安装python和nod ...
- C++ std::map用法简介
#include "map" //引入头文件 初始化: std::map <int, std::string> _map1; //初始化 //c++11中引入的,可以直 ...
- maven安装教程(Idea)
下载网址:https://maven.apache.or 点击Download 根据需要下载需要的版本 1.解压下载好的安装包放入新创建的maven文件夹中 2.在系统变量中添加环境变量(建议改成M2 ...
- centos 安装nginx + 多个tomcat负载均衡
今天在centos上安装了两个tomcat和nginx,进行配置.今天记录的只是最基本的实现测试.(不包含使用redis进行session共享) Nginx 是一款轻量级的Web 服务器/反向代理服务 ...
- <a>标签操作
1.点击后onclick事件失效,变灰,不可用 onclick(this); //事件传递this对象 function viewMm(obj) { $(obj).removeAttr("o ...
- etcd使用
下载: https://github.com/etcd-io/etcd/releases/tag/v3.3.13 tar -zxvf etcd-v3.3.13-linux-amd64.tar.gz ...