07 2011 档案
摘要:在做网络流题目的时候,我们时常因为无法正确建图而遗憾错过本应该的AC。今天通过一些题目,我好好记录一下自己对最大流、最小割的学习感受。Hdu 1565,题意:给你一个矩阵,矩阵上每个点上都有一个数字,现在要你在矩阵中取一些数字,使得取得的数字和最大!规则:相邻的格子不能同时取,即取了一个以后,它四周的数字便不能再取了。分析:(题目实际就是求一个无向图的最大点权独立集)这种方格的题目,我们最容易想到二分图,最大流等等。事实上,也确实是用最大流来解二分图。首先建图:我们将行列相加为奇数的点与S相连,容量就为该点的点权,行列相加为偶数的点与T相连,容量同样为该点的点权。然后,所有与S相连的点,将它与
阅读全文
摘要:知道图论的一些定义和性质对我们解题实在是太有帮助了,我就吃多了这亏,现在一点点的总结,以后还会跟新无向图:点覆盖集:无向图G的一个点集,使得该图中所有边都至少有一个端点在该点集中。最小点权覆盖集:在带点权无向图G中,点权和最小的点覆盖集。点独立集:无向图G的一个点集,使得任何两个在点集中的点在图G中都不相邻。最大点权独立集:在无向带权图G中,点权和最大的点独立集。最小点权覆盖集=最小割=最大流最大点权独立集=总权-最小点权覆盖集有向图:最小路径覆盖:就是找出最小的路径条数,使之成为P的一个路径覆盖. 路径覆盖与二分图匹配的关系(必须是没有圈的有向图) 最小路径覆盖=|P|-最大匹配数;而在无向
阅读全文
摘要:首先,最小路径覆盖=总节点数-最大匹配数。这个应该已经是路人皆知了。所谓最小路径覆盖,是指在一个有向图中,找出最少的几条路径,用它们来覆盖全图这里说的值得注意的地方,如果有向图的边有相交的情况,那么就不能简单的对原图求二分匹配了举个例子,假设有图:1->2 2->5 2->3 4->2,事实上,这其实就是两条边:1->5 4->3,节点2只是他们的一个交点如果只是简单的在原图的基础上求二分匹配,那么得到的匹配答案是2,最小路径覆盖答案便是5-2=3。可是随便一看都能看看出端倪,这个图中,只需要两个点便可以探索完整个地图,这里最小路径覆盖数明显是2。问题究竟出
阅读全文
摘要:pku 1904题目大意是有一个国王,他有n个儿子,现在有n个美丽的女子准备嫁给他的n个儿子。国王已经让他的大臣收集了每个儿子喜欢的姑娘的编号(可以喜欢很多个),并且大臣们已经找出了一个完美匹配的方案。现在国王不满意,他想要知道所有可能的匹配方案(前提是每个儿子可以娶到一个姑娘)。即求出每个儿子所有可能的结婚方案。这题的解法是:1、根据题目信息建图(王子->姑娘)。2、根据题目给定的完美匹配建图(姑娘->王子)。3、求强连通分量4、如果某个姑娘和王子在一个连通分量,并且他们之间在原图上存在直接边,那么这个姑娘便是王子的可能匹配分析:根据题意,每个王子喜欢的姑娘已经确定了,他只能娶他
阅读全文
摘要:网络最大流算法是众多网络流的基础,实现的办法很多,但是在时间复杂度和编程复杂度方面,却总是很难做到两者尽美。比如目前最牛B的高标推进算法(前我前面日志),编程起来居然可以长达接近200行代码,有时候效果还不是很让人满意。另一方面,简单的寻找增广路算法时间上却不敢恭维。所以很多人都选用Dinic算法。其实!SAP算法综合起来说,时间复杂度很低,编程很简单,而且很易于理解,我觉得,没有比SAP更好的最大流算法了。SAP算法框架:1、定义距离标号为各点到汇点距离的下界(即最短距离)。2、在初始距离标号的基础上,不断沿着可行弧找增广路。可行弧的定义为{( i , j ), h[ i ]==h[ j ]
阅读全文
摘要:ZOJ 2587 是一道判断最小割是否唯一的题目。我们都知道最小割等于最大流,可是这只是数值上有答案了呀,这唯一性可怎么办?一样是通过最大流来判断!步骤:1、我们先对原图求一次最大流2、对残留网络,我们从S开始,找到所有所有S能到达的点;再从T开始,找出所有能到达T的点。3、判断原网络中是否还有没有访问到的点,如果没有,则唯一,否者,不唯一!什么意思呢?假设我们有原图如下:求完最大流以后,残留网络如下:这时候,我们从S或者从T,都无法再访问到任何点了,即有很多点都没有被访问到。如图,最小割显然有很多条,我们简单的就可以取出三条,如下图:我们再来看一个唯一的例子,原图如下:求完最大流以后,显然只
阅读全文
摘要:开始楞是没看懂意思,E文让我很纠结...要判断一条边是否为二分图中必须边,方法如下:1、先求出原图的任意最大匹配2、对二分图某一边的所有点,删去其当前的匹配边。删的过程不是简单的将原图设为不连通,你还得将其相应的匹配值设为未匹配。假如原图link[a]=b; 那我们删边的时候既要讲map[b][a]设为0.,同时也要讲link[a]设为-1。(举个例子而已,数据的写法自己定)3、对此跟新图再次从b点(承接上面的例子)进行一次最大匹配,如果此时还能完成最大匹配,那么刚才删去的那条边显然就不是必须边了。反之,必须边成立!(做完记得将图还原)4、重复2步骤,直到所有的点都被删过了一次当前匹配边(还有
阅读全文