[BZOJ1391]解题报告|网络流的又一类建图&Dinic的若干优化
1391: [Ceoi2008]order
有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成。 现在给出这些参数,求最大利润
关于建图和思路
刚开始看这道题的时候十分纠结,任务的做与不做,应当是典型的最小割取舍模型
然而买机器和租机器,又是常见的最小费用最大流模型的标志
进一步思考,对于每一对如下关系(任务)-(机器)
一共有三种处理方法:
1)任务不做
2)租用机器
3)购买机器
好像看出了点眉目,对于第一种情况割掉做任务的收益边其他保留
对于第二种情况割掉租用机器的费用边 第三种情况割掉购买机器的费用边
于是我们可以将s连接每一个任务,每台机器连接t,每个任务和每个机器之间连接租用的费用
这样图就建好了,再体会一下觉得真的很有趣
如果说前几道变形题运用的是s,t的多种含义的话,我认为这道题就是将边的含义多重化
既可以表示割了就得不到保留就仍可以拥有的收益,又可以表示割了就需要付出不割就什么都不干的费用
具体实现过程——Dinic的时空优化
然而这道题的数据范围有1200,用普通的Dinic是过不了的
于是开始了漫长艰辛的优化之路 (捂脸熊

首先点开hzwer学长的blog,发现了一个叫做当前弧优化的东西
大概就是每次dfs的时候对于每一个点假设上次做到第x条边,这条边是做完之后的容量还大于0
第二次做的时候前x-1条是没必要做的
因为要不就是都不符合条件的边,就算符合也将所有的容量都已经挖掉了
所以直接从“当前弧”开始做就可以了 (好形象啊
第二个优化是dfs做完返回值前我们可以加一道特判:
如果当前点扫下来之后积累的所有流量都为0,说明这一点出去所有的边都不具有可用的容量
这个时候下一次就没必要再到这个点来了
于是将dis[p]赋成一个乱七八糟的东西(但是切记不要赋-1啊,万一到s点去了怎么办啊TAT
虽然说跳出了之后就不可能再进来了 但是这种东西写这里很虚啊...
第三个优化是空间优化,这道题瞄了一眼空间限制64MB吓傻,我粗略估计了一下边的数组,大概有近50MB
也就是说我再开一个可能就开不下了...
这次比较幸运可万一考试的时候限制正好卡在那里怎么办?
发现了一个rec数组完全不用开...rec数组在整个过程中的应用只有一条语句
然而实际上如果我们的边下标从0开始计,rec数组有一个很奇妙的性质就是rec[j] = j ^ 1(异或)
平时的题我不愿意去用因为一旦下标从0开始计意味着写得很熟练的
while j<>0 do 就要改写法了,并且link,next这些数组初值都要重新赋了
但是起码知道这样一个优化方法也是好的 说不定在考试的时候适用呢
毕竟rec数组只是为了书写方便,而异或的方法不仅用起来爽而且时间空间上都有节省
加油吧
17/.Apr.
[BZOJ1391]解题报告|网络流的又一类建图&Dinic的若干优化的更多相关文章
- [BZOJ3275]Number解题报告|网络流
Description 有N个正整数,需要从中选出一些数,使这些数的和最大.若两个数a,b同时满足以下条件,则a,b不能同时被选1:存在正整数C,使a*a+b*b=c*c2:gcd(a,b)=1 这道 ...
- P3376 网络流-最大流模板题(Dinic+当前弧优化)
(点击此处查看原题) Dinic算法 Dinic算法相对于EK算法,主要区别在于Dinic算法对图实现了分层,使得我们可以用一次bfs,一次dfs使得多条增广路得到增广 普通的Dinic算法已经可以处 ...
- ACM-ICPC 2017 Asia HongKong 解题报告
ACM-ICPC 2017 Asia HongKong 解题报告 任意门:https://nanti.jisuanke.com/?kw=ACM-ICPC%202017%20Asia%20HongKon ...
- joj 2453 candy 网络流建图的题
Problem D: Candy As a teacher of a kindergarten, you have many things to do during a day, one of whi ...
- POJ 1161 Walls【floyd 以面为点建图】
题目链接:http://poj.org/problem?id=1161 题目大意: 1.给出m个区域,n个俱乐部点.接下来是n个俱乐部点以及各个区域由什么点围成.求一个区域到各个俱乐部点的距离之和最小 ...
- P5471- K-D tree优化建图-弹跳
P5471- K-D tree优化建图-弹跳 优化建图是一种思想. 题意 有\(n\)个城市分布在小鸟岛上,有\(m\)个弹弓分布在这些城市里.因为弹弓体积大,固定麻烦,所以每个弹弓只能把小鸟弹飞到一 ...
- 【解题报告】 Leapin' Lizards HDU 2732 网络流
[解题报告] Leapin' Lizards HDU 2732 网络流 题外话 在正式讲这个题目之前我想先说几件事 1. 如果大家要做网络流的题目,我在网上看到一个家伙,他那里列出了一堆网络流的题目, ...
- [ZOJ2341]Reactor Cooling解题报告|带上下界的网络流|无源汇的可行流
Reactor Cooling The terrorist group leaded by a well known international terrorist Ben Bladen is bul ...
- [BZOJ4289] [PA2012] Tax 解题报告 (最短路+差分建图)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4289 4289: PA2012 Tax Time Limit: 10 Sec Memo ...
随机推荐
- hdu4742 Pinball Game 3D
真他娘的搞不懂cdq分治的顺序问题.但是candy?的博客里提到过,多想想吧-- #include <algorithm> #include <iostream> #inclu ...
- ActiveMQ测试实例
ActiveMQ的安装与启动 1 下载ActiveMQ:http://activemq.apache.org/download.html 2 下载后解压到任意文件夹,解压后文件夹内的目录为: 3 进入 ...
- JAXB轻松转换xml对象和java对象
实体类如下: package com.cn.entity; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; ...
- ubuntu下安装redis及在php中使用
一.安装redis sudo apt-get install redis-server 安装完成后,Redis服务器会自动启动,我们可以通过下面的命令行检查一下: # redis-cli > p ...
- 关于相对布局RelativeLayout的各种属性介绍
RelativeLayout相对布局是个人觉得在android布局中比较常用且好用的一个,当然如果想让布局更漂亮是需要多种布局混合搭建的,这里就需要更深入的学习了,在这只介绍下有关相对布局的东西. 相 ...
- Python中该使用%还是format来格式化字符串?
%还是format 1.皇城PK Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢? 自从Python2.6引入了format这个格式化字符串的方法之后,我认为%还是fo ...
- Python-类-函数参数-takes 0 positional arguments but 1 was given
在学习Python基础的时候,在创建某一个shownametest()函数,解析器会报错 TypeError: shownametest() takes 0 positional arguments ...
- django中判断当前user具有是否有对模块的增删改查权限
首先简单了解一下user的一些属性 User对象 User对象是认证系统的核心.用户对象通常用来代表网站的用户,并支持例如访问控制.注册用户.关联创建者和内容等.在Django认证框架中只有一个用户类 ...
- 文本向量化及词袋模型 - NLP学习(3-1)
分词(Tokenization) - NLP学习(1) N-grams模型.停顿词(stopwords)和标准化处理 - NLP学习(2) 之前我们都了解了如何对文本进行处理:(1)如用NLTK文 ...
- PHP Fatal error: Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'
最近用ThinkPHP,给公司布置线上的网站的时候,遇到的一个问题,记录一下. 打开IE浏览器的设置,Internet选项里的高级,将”显示友好的HTTP错误消息“前都勾去掉! 再次刷新,看到的错误是 ...