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