首页 > 代码库 > 二分图最大匹配模板
二分图最大匹配模板
/*匈牙利算法DFS版*/const int MAXN=300; //最大顶点数bool bmap[MAXN][MAXN]; //二分图bool bmask[MAXN]; //寻找增广路径时的标志数组int nx,ny; //nx为左集合的顶点数目,ny为右集合的顶点数目。int cx[MAXN], cy[MAXN]; //cx[i]表示左集合i顶点所匹配到的右集合的顶点序号,cy[i]同理。//寻找增广路径int findPath(int u){ rep(i,1,ny){ if(bmap[u][i]&&!bmask[i]){ bmask[i]=true; if(cy[i]==-1||findPath(cy[i])){ cy[i]=u; cx[u]=i; return 1; } } } return 0;}//求最大匹配int MaxMatch(){ int ans = 0; rep(i,1,n) cx[i]=cy[i ]=-1; rep(i,1,n) if(cx[i]==-1){ mem(bmask,false); ans += findPath(i); } return ans;}int main(){ /* 根据题意构图.. */ return 0;}
二分图最大匹配模板
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。