网络流24题
前言
我的网络流(从入门到刷完某23题)大概花了两周多一点。总体来说,网络流入门还行,上手不难,但做题的时候就能感受到绝望般的实力压制...
网络流的算法非常简单。或者说,非常有限。最大流,费用流..然后仔细想想也没有什么了。但是网络流的题难就在建模。怎么把一个实际问题,抽象为模型,而且是网络流这种模型中也算是比较抽象的模型,就很有思维含量。像我这种蒟蒻只能在题解中恍然大悟,然后“欸,雾草,刚刚我怎么就想不到,再来一道肯定行”,接着真香,酱紫循环。
欸,果然还是太菜了ヾ(≧へ≦)〃
网络流24题列表
做网络流24题的时候,是随手在百度上搜索“网络流24题”,然后找了一篇todolist,按着“顺序”做的。但是事实上,这个todolist排列也不是合理。现在全部做完之后,按照我做题的心得重新排一下序列
本列表经可能地按照按照难度从易到难,相同算法整理汇总,以及算法按照(\({二分图} \Rightarrow {网络流} \Rightarrow {费用流}\))的顺序。本列表最终结果为期望值的最大值(●'◡'●)
编号 | 题目名字 | 题目模型 | 转化模型 |
---|---|---|---|
1 | 飞行员配对方案问题 | 二分图最大匹配 | 二分图 |
2 | 孤岛营救问题 | 分层图最短路径 | 最短路径 |
3 | 汽车加油行驶问题 | 分层图最短路径 | 最短路径 |
4 | 软件补丁问题 | 最小转移代价 | 最短路径 |
5 | 星际转移问题 | 分层图转移 | 最大流 |
6 | 太空飞行计划问题 | 最大权闭合图 | 最小割 |
7 | 最小路径覆盖问题 | 有向无环图最小路径覆盖 | 最大流 |
8 | 魔术球问题 | 有向无环图最小路径覆盖 | 最大流 |
9 | 圆桌问题 | 二分图多重匹配 | 最大流 |
10 | 试题库问题 | 二分图多重匹配 | 最大流 |
11 | 分配问题 | 二分图最佳匹配 | 费用流 |
12 | 方格取数问题 | 二分图点权最大独立集 | 最小割 |
13 | 骑士共存问题 | 二分图点权最大独立集 | 最小割 |
14 | 负载平衡问题 | 费用流 |
费用流 |
15 | 运输问题 | 费用流 |
费用流 |
16 | 最长递增子序列问题 | 限制性带权路径 | 最大流 |
17 | 航空路线问题 | 限制性带权路径 | 费用流 |
18 | 数字梯形问题 | 限制性带权路径 | 费用流 |
19 | 最长k可重区间集问题 | 限制性带权路径 | 费用流 |
20 | 最长k可重线段集问题 | 限制性带权路径 | 费用流 |
21 | 深海机器人问题 | 限制性带权路径 | 费用流 |
22 | 火星探险问题 | 限制性带权路径 | 费用流 |
23 | 餐巾计划问题 | 线性规划网络流优化 | 费用流 |
24 | 机器人路径规划问题 | WARNING!! | WARNING!! |
网络流24题题型归纳
把网络流24题中,所有出现过的题型整理如下:
图上状态转移
涉案题目:
编号 | 题目名字 | 题目模型 | 转化模型 |
---|---|---|---|
2 | 孤岛营救问题 | 分层图最短路径 | 最短路径 |
3 | 汽车加油行驶问题 | 分层图最短路径 | 最短路径 |
4 | 软件补丁问题 | 最小转移代价 | 最短路径 |
5 | 星际转移问题 | 分层图转移 | 最大流 |
这类题的特征就是,由一个确定的状态可以通过有限的方案,转化为另外一种确定的状态,思路有点类似dp转移。
2、3、4 这三道题就是状压dp(没错,网络流里混进来的间谍),见图,一发spfa或dijkstar即可
其中第4题还有一点比较特殊,这道题的转移方案特别多,对应过来就是,图上的边特别特别多,多到无法存下来。咋办呢?由于点是确定且数量可以接受的,就跑最短路径的同时,“建”边即可。
而 5 这道题稍微有一点难度。这道题和前三道题有所区分。它并不是单纯的状压,而用到网络流。
它的一个思维难点就在于时间是无法事先确定的,只能模拟。模拟的过程中,不断为某一天增边建图,然后跑最大流
有向无环图最小路径覆盖
涉案题目:
编号 | 题目名字 | 题目模型 | 转化模型 |
---|---|---|---|
7 | 最小路径覆盖问题 | 有向无环图最小路径覆盖 | 最大流 |
8 | 魔术球问题 | 有向无环图最小路径覆盖 | 最大流 |
详情请参考我的博客 “网络流 最小路径覆盖” 和 “题解 魔术球问题”
二分图相关算法
涉案题目:
编号 | 题目名字 | 题目模型 | 转化模型 |
---|---|---|---|
9 | 圆桌问题 | 二分图多重匹配 | 最大流 |
10 | 试题库问题 | 二分图多重匹配 | 最大流 |
11 | 分配问题 | 二分图最佳匹配 | 费用流 |
这类题就是用网络流的算法去解决二分图的问题。学习了网络流之后,再看二分图,感觉就比较简单了。简单的建图,简单的网络流即可一发带走( •̀ ω •́ )y
不相交路径
涉案题目:
编号 | 题目名字 | 题目模型 | 转化模型 |
---|---|---|---|
16 | 最长递增子序列问题 | 限制性带权路径 | 最大流 |
17 | 航空路线问题 | 限制性带权路径 | 费用流 |
18 | 数字梯形问题 | 限制性带权路径 | 费用流 |
19 | 最长k可重区间集问题 | 限制性带权路径 | 费用流 |
20 | 最长k可重线段集问题 | 限制性带权路径 | 费用流 |
21 | 深海机器人问题 | 限制性带权路径 | 费用流 |
22 | 火星探险问题 | 限制性带权路径 | 费用流 |
第一眼看限制性带权路径的题,很容易让人感觉是搜索题。因为假如数据范围足够小,简单的搜索是能够保证正确性的。
但是,学完了网络流,可解决的数据范围肯定就要比搜索肥了不少
这类题的总体思路是拆点:
- 从\({x} \Rightarrow {x'}\) 的流量和费用表示经过这个点的收益
- 从\({x'} \Rightarrow {y}\) 的流量和费用表示从一个x点转移到y点,或者转移过程中点收益
- 从\({src} \Rightarrow {x}\) 表示路径的起始点,流量为路径条数,费用通常为\(0\)
- 从\({x} \Rightarrow {tar}\) 表示路径的终点,流量通常为\(INF\),费用通常为\(0\)
然后,建图,一发入魂╰( ̄ω ̄o)
线性规划网络优化
涉案题目:
编号 | 题目名字 | 题目模型 | 转化模型 |
---|---|---|---|
23 | 餐巾计划问题 | 线性规划网络优化 | 费用流 |
这类题就是用网络流来优化线性规划,由于线性规划本身就具有很强的灵活性,所以这类题也相应的具有很强的灵活性
说是“类”,其实也只见过两道题而已啊~~(>人<;)
餐巾计划这道题我认为是网络23题中最难的一道题。建图很有创造性,通过建图,完美的表达了题目的限制条件的同时,又用上了费用流这个强大利器,Orz
后记
网络流23题一共耗了我两周多时间。从当初望着todolist望尘莫及,到最后ac完最后一道题,在内网掀起一阵波澜,算是体验了一轮春播秋收。
希望以后还能保持这种学习热情( •̀ ω •́ )y
手打5000字,好累