二分图最大匹配模板
2015-10-06 19:23
274 查看
也称匈牙利算法。这里使用的邻接表的数据结构时间复杂度为O(n*m)空间复杂度为O(n+m)
板子如下:
使用时注意二分图是有向还是无向的。
二分图的最小顶点覆盖=最大匹配数
http://acm.hnu.cn/online/?action=problem&type=show&id=13449&courseid=0
匈牙利算法讲解
http://fengweiding.blog.163.com/blog/static/23005412120151258049532/
板子如下:
struct node{ int v,next; }edge[maxn]; int pre[maxn],l,vis[maxn],match[maxn]; int tot,n,m; void init(){ l=0; memset(pre,-1,sizeof pre); memset(match,-1,sizeof match); } void add(int u,int v){ edge[l].v=v; edge[l].next=pre[u]; pre[u]=l++; } int dfs(int u){ for(int i=pre[u];i+1;i=edge[i].next){ int v=edge[i].v; if(!vis[v]){ vis[v]=1; if(match[v]==-1||dfs(match[v])){ match[v]=u; return 1; } } } return 0; } int hungary(){ tot=0; for(int i=1;i<=max(n,m);i++){ cle(vis); if(dfs(i))tot++; } return tot; }
使用时注意二分图是有向还是无向的。
二分图的最小顶点覆盖=最大匹配数
http://acm.hnu.cn/online/?action=problem&type=show&id=13449&courseid=0
匈牙利算法讲解
http://fengweiding.blog.163.com/blog/static/23005412120151258049532/
相关文章推荐
- 计算机会议排名
- UI13_Block传值练习
- uva 10562
- [MyBatis]诡异的Invalid bound statement (not found)错误
- 【转】你应该知道的 RPC 原理
- Linux Curses编程实现贪吃蛇
- fzu月赛 2203 单纵大法好 二分
- 用U盘装Windows+linux双系统
- ubuntu14.04下安装indigo版ROS
- 为Maven项目配置多个源文件夹
- 英语语法 连缀动词
- IntelliJ IDEA源码目录里的xml文件怎么发布到编译后的目录里?
- UVAlive 4763 Sudoku Extension【DLX】
- Java基础知识强化之集合框架笔记41:Set集合之HashSet存储自定义对象并遍历练习
- Java程序员面试中的多线程问题(转)
- lcd 显示屏
- 条款17:以独立的语句将资源置入智能指针。
- 数据写到本地
- C++primer学习:string类操作练习(3)
- 管理指针成员(九)