传送门1
传送门2
写在前面:一道让我想骂人的题目
思路:和修车那道题目很像,如果想要了解建图的话可以点进链接看一下,但是这是它的加强版,如果直接加边的话会T会M,所以我们只能动态的加入边,就是说,一个厨师做了他的第一道菜之后才能做第二道菜,所以我们每增广一次就相当于某个厨师做了一道菜(设这是他做的第x道菜),这样他接下来就可以做第x+1道菜,即连接“这个厨师做第x+1道菜”的点与“其他顾客”。
简述:一开始连好源、汇点与厨师、顾客,连接各个厨师”做第一道菜“的点与各种菜的点,然后每次spfa增广后加入新的边即可
注意:
1.左边厨师右边顾客的建图在codevs上会T掉1个点(只有一个厨师),所以最好还是左边顾客右边厨师的建图
2.流量全为1
代码:

#include<bits/stdc++.h>
#define M 100000
using namespace std;
int tot=1,s,t,n,m,x,y,ans;
int first[M],up[M],dis[M],p[41],maps[41][101];
bool vis[M];
struct edge
{int v,w,next,cost;
}e[M<<5];
queue<int>q;
int in()
{int t=0;char ch=getchar();while(!isdigit(ch)) ch=getchar();while (isdigit(ch)) t=(t<<3)+(t<<1)+ch-48,ch=getchar();return t;
}
void add(int x,int y,int z,int c){e[++tot]=(edge){y,z,first[x],c};first[x]=tot;}
bool spfa()
{memset(dis,63,sizeof(dis));q.push(s);dis[s]=0;while (!q.empty()){int k=q.front();q.pop();vis[k]=0;for (int i=first[k];i;i=e[i].next)if (e[i].w&&dis[e[i].v]>dis[k]+e[i].cost){dis[e[i].v]=dis[k]+e[i].cost;up[e[i].v]=i;if (!vis[e[i].v]) vis[e[i].v]=1,q.push(e[i].v);}}return dis[t]<0x7ffff;
}
void flow()
{int minn=0x7fffff;for (int i=up[t];i;i=up[e[i^1].v]){minn=min(minn,e[i].w);if (e[i].v==t) x=(e[i^1].v-n)/p[0]+1,y=(e[i^1].v-n)%p[0]+1;}ans+=dis[t]*minn;for (int i=up[t];i;i=up[e[i^1].v])e[i].w-=minn,e[i^1].w+=minn;
}
main()
{n=in();m=in();for (int i=1;i<=n;i++)p[i]=in(),p[0]+=p[i];for (int i=1;i<=n;i++)for (int j=1;j<=m;j++) maps[i][j]=in();t=p[0]*m+n+1;for (int i=1;i<=n;i++)add(s,i,p[i],0),add(i,s,0,0);for (int i=1;i<=p[0]*m;i+=p[0])add(i+n,t,1,0),add(t,i+n,0,0);for (int i=1;i<=m;i++)for (int j=1;j<=n;j++)add(j,(i-1)*p[0]+1+n,1,maps[j][i]),add((i-1)*p[0]+1+n,j,0,-maps[j][i]);while (spfa()){flow();for (int i=1;i<=n;i++)add(i,(x-1)*p[0]+y+n,1,y*maps[i][x]),add((x-1)*p[0]+y+n,i,0,-y*maps[i][x]);add((x-1)*p[0]+y+n,t,1,0);add(t,(x-1)*p[0]+y+n,0,0);}printf("%d",ans);
}

【codevs1935】【BZOJ2879】美食节,网络流之动态加点相关推荐

  1. [BZOJ2879] [Noi2012] 美食节 (费用流 动态加边)

    Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...

  2. 2879: [Noi2012]美食节

    Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...

  3. 一些有难度的网络流问题

    本质是线性规划 最小割建模 NOI2010 海拔 一个的网格,每跳变的两个方向都有一定数目的人流,每个格点都有海拔,一个人爬坡需要付出高度差的代价,下坡不付出代价,左下角高度为,右上角高度为,求安排其 ...

  4. BZOJ3435[Wc2014]紫荆花之恋——动态点分治(替罪羊式点分树套替罪羊树)

    题目描述 强强和萌萌是一对好朋友.有一天他们在外面闲逛,突然看到前方有一棵紫荆树.这已经是紫荆花飞舞的季节了,无数的花瓣以肉眼可见的速度从紫荆树上长了出来.仔细看看的话,这个大树实际上是一个带权树.每 ...

  5. 洛谷P2050 美食节

    修车加强版.发现每个厨师拆成p个点太浪费了,毕竟总共用到的才p个点.于是从下往上一个一个加,加到满流就停. 论动态加点费用流的正确姿势...... 我自己加总是出现负环...我是每次加一整层,然后跑完 ...

  6. 【多题合集】网络流24题练习(更新至魔术球问题)

    飞行员配对问题(仅求方案总数) 传送门 思路:二分图后dinic走起,各边容量为1 代码: #include<bits/stdc++.h> #define inf 0x7ff using ...

  7. BZOJ 3435: [Wc2014]紫荆花之恋 【(替罪羊树式)动态点分治 + Treap】

    BZOJ 传送门 洛谷传送门 题目分析: 似乎做过几道点分树的题之后题解还是比较好懂的. 这位dalao的题目分析非常的到位,Orz. PoPoQQQ的具体解读也非常的清晰,Orz. R i + R ...

  8. NOI2012 Day2

    NOI2012 Day2 迷失游乐园 题目描述:给出一个\(n\)个点的图,边数为\(n-1\)或\(n\).从某个点出发,每次等概率地随机选一个相连的并且没有经过过的点,直到不能走为止,问期望路径长 ...

  9. java long转object_Java 类型转换以及Object转成其他类型

    Object转int int count=(int)map.get("count") int count=Integer.parseInt((String)map.get(&quo ...

最新文章

  1. C#是否该支持“try/catch/else”语法
  2. Plant Com:中科院遗传发育所白洋组开发定量检测宿主微生物组的HA-QAP技术(王二涛点评)...
  3. 用pandas.dataframe 的append()方法时候,合成的整个数据的索引是分块的
  4. Qt 5 打包成一个单文件方法,可以在其他电脑运行(附资源)
  5. 计算机系统的优化项目,电脑开机显示时间后有个优化项目是什么意思
  6. ip, tcp, udp, icmp header
  7. emulator教程 lbochs pc_bochs 开启调试选项
  8. bat函数调用 带返回值
  9. 第十章:在Spark集群上掌握比较重要的图操作之Computing Degree
  10. 算法笔记_面试题_5.验证二叉搜索树
  11. android前置拍照镜像代码,从Android的前置摄像头拍摄的镜像翻转视频
  12. Instant类[java]
  13. Omit和Exclude的区别
  14. Triggers — 触发响应
  15. Linux监控系统概览
  16. python关键字输出
  17. Html上传文件php处理上传文件
  18. 编程中无穷大的设定 很多人可能设为0x7fffffff,这个数的确是32-bit int的最大值,符号位为0,其他的都是1 但在很多情况下,0x7fffffff会出现错误,比如溢出,这样两个无穷大数相
  19. MemoryError: Unable to allocate 1.43 TiB for an array with shape (3700, 5300) and data type float64
  20. Android手机横屏竖屏的应用

热门文章

  1. 3分钟创建一个游戏类容器应用【华为云分享】
  2. 【华为敏捷/DevOps实践】8. 持续交付,持续部署,傻傻分不清楚
  3. 【华为云实战开发】13.如何在云端快速搭建python网站
  4. java定时任务管理_基于SpringBoot+layui秒级定时任务管理:JTimer for JAVA项目
  5. Android TextView滚动的两种方案
  6. 2021-06-20 pip有时候需要加上--user安装才好使
  7. MATLAB定时器的简单使用
  8. day21 java的日期类
  9. 监控硬盘脚本linux,shell脚本实现磁盘监控系统
  10. python ipaddr库_用Python脚本查询纯真IP库QQWry.dat(Demon修改版)