网络流 建模

网络流算法和建模

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

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

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

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

#1 最大流模型

1.二分图最大匹配

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

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

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

2.[luoguP2763]试题库问题

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

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

posted @   羊扬羊  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示