话说网络流这个东西,其题面的特点就是:就算告诉你这道题是网络流,你也不会做(有点皮)
所以说,dzyo大佬就给我们总结了一些基本模型,感觉打开了通往新世界的大门……
最大匹配
用网络流来解决最大匹配这类问题
首先题目中一般会出现“最多,至多”这类字眼,或者问“是否有一种分配方案满足条件”
这个时候你就可以思考一下网络流了
考虑一条流就是一种合法方案, 你所需要做的就是确定流量限制以保证一条流流到最后,无论怎么流都是合法的
如果还有费用什么的,你就往边权上加
来一打例题,都是求最大匹配的问题
最小路径覆盖
记得很久以前写过有关这方面的一道例题(觉得自己写得真好,O(∩_∩)O哈哈~,皮一下)那么就再上一道例题
然而这个不是重点,重点是最小链覆盖
我之前倒是一直没搞清楚链和路径的区别是什么,今天才算是搞清楚了
最小路径覆盖:又名最小路径点覆盖
最小链覆盖:又名最小路径可重复点覆盖
知道其全名过后,总算是搞明白了,链的话一个节点可以被覆盖多次,而路径的话一个节点只能被覆盖一次
而有向无环图的最小路径可重复点覆盖,等价于先对有向图进行传递闭包(FLoyd),再在此基础上求最小路径点覆盖
在这里传递闭包起的作用就是将本会重复经过同一点的链,现在就不重复走,改成路径
再感性理解一下,就是假设两条路都经过i点,按照普通的方法,只能走一次i点。第二个就没法走了。
所以我们floyd传递闭包,直接跳过那个i点,让两条路直接相连,那么就可以忽略那个重复的i点了
dzyo老师说如果存在 x → y,相当于 x 可以跳过 y 去匹配之后的。 在网络流的时候 y ′ 向 y 连边即可。
但各路大神都没用这个方法A题,我就先不尝试这个啦
最长反链
最长反链是一些点的集合,在这个集合中任意两个点,互相不能到达
这个东西就当结论记住好啦,那个什么某D定理(dzyo就是这么叫的,╭(╯^╰)╮)Dilworth定理,这个怎么证明的就不糊了
我们记住:最长反链 = 最小链覆盖,就好啦.