放个链接

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. PAT甲级——A1014 Waiting in Line

    Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...

  2. ECMAScript 5 严格模式

    1. 变量必须使用var声明,杜绝不小心将本地变量声明成一个全局变量 在常规模式下,如果我们声明一个变量时省略了var关键字,解析引擎会自动将其声明为全局变量,但在严格模式下,会直接抛出异常,不会为我 ...

  3. mysql建表设置格式

    建表时必须设置字段编码格式为COLLATE utf8_bin,表示查询时该字段内容区分大小写,如果不需要区分大小写,可以设置为COLLATE utf8_ genera_ci,表示忽略大小写

  4. Linux User and Group Management

    linux is a multi-user and multitasking OS. In Linux, you can create any number of user account and g ...

  5. git与github建立链接(学习笔记)

    总结步骤: 1.将所有文件添加到本库 git add . 2. git commit -m "提示信息随便写" 3.查看git修改状态 git status 4.获取远程库与本地同 ...

  6. 工控安全入门(一)—— Modbus协议

    modbus基础知识 modbus协议最初是由Modicon公司在1971年推出的全球第一款真正意义上用于工业现场的总线协议,最初是为了实现串行通信,运用在串口(如RS232.RS485等)传输上的, ...

  7. 让footer始终待在页面底部

    1.把html和body的height属性设为100%;保证content的高度能撑满浏览器; 2.把#content的高度也设置为100% ,但是这里我们使用了“min-height”属性,而不是的 ...

  8. SQLite in Python: 如何在Python中使用SQLite数据库

    SQLite3 可使用 sqlite3 模块与 Python 进行集成.sqlite3 模块是由 Gerhard Haring 编写的.它提供了一个与 PEP 249 描述的 DB-API 2.0 规 ...

  9. CentOS安装fortune+cowsay

    1.先找下看有没 2.安装 yum -y install fortune-mod 3.执行fortune 应该可以输出了,接着去弄中文词库,阮一峰的: git clone git@github.com ...

  10. 【Codeforces Round #430 (Div. 2) B】Gleb And Pizza

    [链接]点击打开链接 [题意] 在这里写题意 [题解] 根据圆心到原点的距离这个东西判断一下圆在不在那个环里面就好 [错的次数] 0 [反思] 在这了写反思 [代码] #include <cst ...