我曾经高中进行竞赛的时候学习因为考试需要,粗略的学习过网络流相关知识。大学再回头来看还是有一些不清晰不明确的地方(其实连网络流24题都没有写完)
在这里进行一些最近学习网络流的一些总结。
网络流
都知道网络流是类比水流的一种算法,通过几道题的感受,我个人觉得其实它本质上更算是一种的线性规划问题。也就像是水流,从一根管子流向下一个管子是有一个时间线的。
下面就题目来提一些问题:
餐巾计划问题中,将一天的毛巾分为早上和晚上的毛巾,早上的毛巾就是当天所要求的干净毛巾。这个时候到底是从源点连需要的毛巾还是需要的毛巾连向汇点?
按照一种线性的思想来说,当天需要的毛巾有两个来源,是从某个很大流量的水管流来的一个意义是直接新买毛巾的水流,还有前面时间的脏毛巾洗过而来。费用就可以用之前的一些水管来定。这个时候再往之前想,脏毛巾从哪里来,会发现其实每天需要的新毛巾就是每天多出来的脏毛巾。看似时间线是循环了的,但是其实当前所需要的脏毛巾其实是之前的脏毛巾,当天的脏毛巾不会影响到当天的新毛巾的获取。源点汇点本质就是一种提供和接纳,汇点接纳需求,源点发毛巾。
想象一下:
新毛巾连一条有向边到旧毛巾表示时间的流逝,如果这条边的中间插入一个点X,那么新毛巾—>X的意义就是满足要求,X—>旧毛巾就是一种源点的输送的思想。
这时候将这两种意义拆开,就变成了源汇点。
最大权闭合子图问题中,做过的两道题目方格取数和太空飞行计划问题,都是有一种关系再两个集合之间,选了一个点另一个点就不能选的这种关系。最小割就是这两个集合的取舍,其实本质上是一个二分图问题。(之前自己的想法是半错半对的)其实这类问题本质上就是一个互斥的问题,当源汇点联通就是一种相斥的关系。