其他分享
首页 > 其他分享> > 网络流 建模

网络流 建模

作者:互联网

网络流算法和建模

网络流的基本算法大家想必是知道的,主流的应该是Dinic和HLPP之类的,本人太弱,只会Dinic,当然事实上一般在算法竞赛中不大会搞一个Dinic做法必定会TLE的毒瘤题,所以基本算法会Dinic是完全足够的

还有些基本定理,首当其冲就是最大流最小割定理,虽然你可能不会证明它,但记起来很简单

但是,网络流题目真正的难点并不是基本算法,毕竟Dinic不算是个很难理解的算法,网络流的真正难点是建模

那么笔者在此介绍几个关于最大流和最小割的建模

#1 最大流模型

1.二分图最大匹配

一道开胃小菜,这题大家以前一定会优先想到使用匈牙利算法,其实也可以从网络流的角度来考虑

我们以这张丑陋的二分图举个例子
显而易见的是,在二分图最大匹配中,每条边最多被选到一次
也很显而易见的是,每个点最多被选到一次
这些东西显然都是限制,需要我们采取一些方法来满足这些数量上的限制
从网络流的角度看来,它们也就是边的最大流量
这样一幅画面就产生了:

按照流量平衡定理,进入每个点的流量都等于这个点流出的流量
那么就可以保证:左边一层的点至多被访问1次,同时右边一层也是
因为两层中间的点最大流量是1,因此每条边最多被访问一次
接下来的事情很简单,对它跑dinic,答案就是这个图的最大流
代码就很简单了,应该不用再贴了

2.[luoguP2763]试题库问题

首先这题的题面是由点问题的,虽然每道题可以被看做多个类型,但是事实上被选的时候它只能被归在一个类型中
总之来看看这道题的限制吧,显然:
1.每道题只能被取一次
2.每道题只能匹配一道题
3.每种类型最多取到题目中的要求个
然后嘛,就可以很自然地构造出这张图了:

我们对它跑最大流,如果最大流小于总和\(m\),那肯定是No Solution!
那么如何判断方案?
我们看看左右两层之间连的正向边是否被改为0即可
代码也是不难的,不用再贴了
事实上下面的题我也不贴了,主要是因为我懒这些题最重要的是思路,代码不难

标签:最大,建模,流量,网络,算法,Dinic
来源: https://www.cnblogs.com/sheepcsy/p/16621187.html