01 2013 档案

摘要:匈牙利算法求二分图的最大匹配最大匹配:图中包含边数最多的匹配称为图的最大匹配。二分图的最大匹配有两种求法,第一种是最大流;第二种就是匈牙利算法。最大流算法的核心问题就是找增广路径(augmentpath)。匈牙利算法也不例外,它的基本模式就是:初始时最大匹配为空while找得到增广路径do把增广路径加入到最大匹配中去可见和最大流算法是一样的。但是这里的增广路径就有它一定的特殊性,下面我来分析一下。(注:匈牙利算法虽然根本上是最大流算法,但是它不需要建网络模型,所以图中不再需要源点和汇点,仅仅是一个二分图。每条边也不需要有方向。)图1是给出的二分图中的一个匹配:[1,5]和[2,6]。图2就是在 阅读全文
posted @ 2013-01-23 17:50 另Ⅰ中Feel▂ 阅读(270) 评论(0) 推荐(0) 编辑
摘要:二分图最优匹配:对于二分图的每条边都有一个权(非负),要求一种完备匹配方案,使得所有匹配边的权和最大,记做最优完备匹配。(特殊的,当所有边的权为1时,就是最大完备匹配问题)解二分图最优匹配问题可用穷举的方法,但穷举的效率=n!,所以我们需要更加优秀的算法。先说一个定理:设M是一个带权完全二分图G的一个完备匹配,给每个顶点一个可行顶标(第i个x顶点的可行标用lx[i]表示,第j个y顶点的可行标用ly[j]表示),如果对所有的边(i,j)inG,都有lx[i]+ly[j]>=w[i,j]成立(w[i,j]表示边的权),且对所有的边(i,j)inM,都有lx[i]+ly[j]=w[i,j]成立 阅读全文
posted @ 2013-01-23 17:49 另Ⅰ中Feel▂ 阅读(2515) 评论(0) 推荐(0) 编辑
摘要:题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1711KMP#include<iostream>#include<string>using namespace std;const int Max_n=1000010;const int Max_m=10010;int a[Max_n];int b[Max_m];int n, m;//void get_nextval(const char *T, int next[]) //字符数组用这个void get_nextval(const int *T, int next[]) 阅读全文
posted @ 2013-01-19 14:06 另Ⅰ中Feel▂ 阅读(139) 评论(0) 推荐(0) 编辑