【codevs1935】【BZOJ2879】美食节,网络流之动态加点
传送门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】美食节,网络流之动态加点相关推荐
- [BZOJ2879] [Noi2012] 美食节 (费用流 动态加边)
Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...
- 2879: [Noi2012]美食节
Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...
- 一些有难度的网络流问题
本质是线性规划 最小割建模 NOI2010 海拔 一个的网格,每跳变的两个方向都有一定数目的人流,每个格点都有海拔,一个人爬坡需要付出高度差的代价,下坡不付出代价,左下角高度为,右上角高度为,求安排其 ...
- BZOJ3435[Wc2014]紫荆花之恋——动态点分治(替罪羊式点分树套替罪羊树)
题目描述 强强和萌萌是一对好朋友.有一天他们在外面闲逛,突然看到前方有一棵紫荆树.这已经是紫荆花飞舞的季节了,无数的花瓣以肉眼可见的速度从紫荆树上长了出来.仔细看看的话,这个大树实际上是一个带权树.每 ...
- 洛谷P2050 美食节
修车加强版.发现每个厨师拆成p个点太浪费了,毕竟总共用到的才p个点.于是从下往上一个一个加,加到满流就停. 论动态加点费用流的正确姿势...... 我自己加总是出现负环...我是每次加一整层,然后跑完 ...
- 【多题合集】网络流24题练习(更新至魔术球问题)
飞行员配对问题(仅求方案总数) 传送门 思路:二分图后dinic走起,各边容量为1 代码: #include<bits/stdc++.h> #define inf 0x7ff using ...
- BZOJ 3435: [Wc2014]紫荆花之恋 【(替罪羊树式)动态点分治 + Treap】
BZOJ 传送门 洛谷传送门 题目分析: 似乎做过几道点分树的题之后题解还是比较好懂的. 这位dalao的题目分析非常的到位,Orz. PoPoQQQ的具体解读也非常的清晰,Orz. R i + R ...
- NOI2012 Day2
NOI2012 Day2 迷失游乐园 题目描述:给出一个\(n\)个点的图,边数为\(n-1\)或\(n\).从某个点出发,每次等概率地随机选一个相连的并且没有经过过的点,直到不能走为止,问期望路径长 ...
- java long转object_Java 类型转换以及Object转成其他类型
Object转int int count=(int)map.get("count") int count=Integer.parseInt((String)map.get(&quo ...
最新文章
- C#是否该支持“try/catch/else”语法
- Plant Com:中科院遗传发育所白洋组开发定量检测宿主微生物组的HA-QAP技术(王二涛点评)...
- 用pandas.dataframe 的append()方法时候,合成的整个数据的索引是分块的
- Qt 5 打包成一个单文件方法,可以在其他电脑运行(附资源)
- 计算机系统的优化项目,电脑开机显示时间后有个优化项目是什么意思
- ip, tcp, udp, icmp header
- emulator教程 lbochs pc_bochs 开启调试选项
- bat函数调用 带返回值
- 第十章:在Spark集群上掌握比较重要的图操作之Computing Degree
- 算法笔记_面试题_5.验证二叉搜索树
- android前置拍照镜像代码,从Android的前置摄像头拍摄的镜像翻转视频
- Instant类[java]
- Omit和Exclude的区别
- Triggers — 触发响应
- Linux监控系统概览
- python关键字输出
- Html上传文件php处理上传文件
- 编程中无穷大的设定 很多人可能设为0x7fffffff,这个数的确是32-bit int的最大值,符号位为0,其他的都是1 但在很多情况下,0x7fffffff会出现错误,比如溢出,这样两个无穷大数相
- MemoryError: Unable to allocate 1.43 TiB for an array with shape (3700, 5300) and data type float64
- Android手机横屏竖屏的应用
热门文章
- 3分钟创建一个游戏类容器应用【华为云分享】
- 【华为敏捷/DevOps实践】8. 持续交付,持续部署,傻傻分不清楚
- 【华为云实战开发】13.如何在云端快速搭建python网站
- java定时任务管理_基于SpringBoot+layui秒级定时任务管理:JTimer for JAVA项目
- Android TextView滚动的两种方案
- 2021-06-20 pip有时候需要加上--user安装才好使
- MATLAB定时器的简单使用
- day21 java的日期类
- 监控硬盘脚本linux,shell脚本实现磁盘监控系统
- python ipaddr库_用Python脚本查询纯真IP库QQWry.dat(Demon修改版)