二分图匹配模板
来源:互联网 发布:post请求返回json数据 编辑:程序博客网 时间:2024/06/01 09:03
二分图最大匹配
①Hopcroft-Carp算法
时间复杂度O(sqrt(n)*m)
struct edge{ int v,nxt;}e[M];int n,m;int head[N],e_cnt;int mx[N],my[N],dx[N],dy[N],vis[N],dis;queue<int> q;void Init(){ e_cnt=0; memset(vis,0,sizeof(vis)); memset(head,-1,sizeof(head));}void Addedge(int u,int v){ e[e_cnt].v=v;e[e_cnt].nxt=head[u];head[u]=e_cnt++;}bool SearchP(){ while(!q.empty()) q.pop(); dis=inf; memset(dx,-1,sizeof(dx)); memset(dy,-1,sizeof(dy)); for(int i=1;i<=n;i++) { if(mx[i]==-1) { q.push(i); dx[i]=0; } } while(!q.empty()) { int u=q.front();q.pop(); if(dx[u]>dis) break; for(int i=head[u];i!=-1;i=e[i].nxt) { int v=e[i].v; if(dy[v]==-1) { dy[v]=dx[u]+1; if(my[v]==-1) dis=dy[v]; else { dx[my[v]]=dy[v]+1; q.push(my[v]); } } } } return dis!=inf;}bool Dfs(int u){ for(int i=head[u];i!=-1;i=e[i].nxt) { int v=e[i].v; if(!vis[v]&&dy[v]==dx[u]+1) { vis[v]=1; if(my[v]!=-1&&dy[v]==dis) continue; if(my[v]==-1||Dfs(my[v])) { my[v]=u; mx[u]=v; return true; } } } return false;}int Maxmatch(){ int ans=0; memset(mx,-1,sizeof(mx)); memset(my,-1,sizeof(my)); while(SearchP()) { memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) { if(mx[i]==-1&&Dfs(i)) ans++; } } return ans;}②匈牙利算法
时间复杂度O(n*m)
struct edge{ int v,nxt;}e[M];int n,m;int head[N],e_cnt;int vis[N],my[N],mx[N];void Init(){ e_cnt=0; memset(head,-1,sizeof(head));}void Addedge(int u,int v){ e[e_cnt].v=v;e[e_cnt].nxt=head[u];head[u]=e_cnt++;}bool Dfs(int u){ for(int i=head[u];i!=-1;i=e[i].nxt) { int v=e[i].v; if(!vis[v]) { vis[v]=1; if(my[v]==-1||Dfs(my[v])) { mx[u]=v; my[v]=u; return true; } } } return false;}int Maxmatch(){ int ans=0; memset(mx,-1,sizeof(mx)); memset(my,-1,sizeof(my)); for(int i=1;i<=n;i++) { if(mx[i]==-1) { memset(vis,0,sizeof(vis)); if(Dfs(i)) ans++; } } return ans;}
0 0
- 二分图匹配模板
- 图--二分匹配模板
- 【二分图匹配模板】
- 二分图匹配模板
- 二分图匹配模板
- 二分图匹配模板
- 二分图匹配模板
- 二分图匹配 模板
- 二分图匹配模板
- 二分图匹配模板
- 二分图匹配模板
- 二分图匹配模板
- 二分图匹配模板
- 二分图匹配算法模板
- 二分图最大匹配模板
- 二分图完美匹配模板
- 【图论】[二分图匹配] 模板
- 二分图最大匹配模板
- 《Linux设备驱动开发详解》读书笔记(1)
- iOS A/B Test 方案探索
- Boost.Asio学习之Allocation
- 使用tinyXML2 读写配置文件
- 深入理解C#:编程技巧总结(二)
- 二分图匹配模板
- 最常用的Eclipse快捷键
- 程序员面试金典: 9.9 递归和动态规划 9.9八皇后问题
- PAT甲级1001
- Ubantu 14.04 下连接mysql
- 基于TI-RTOS的CC2650DK开发(30)--- Swi官方示例
- 解析IntelliJ IDEA内部设计
- PAT1002-A+B for Polynomials
- [acm/icpc2016ChinaFinal][CodeforcesGym101194] Mr. Panda and Fantastic Beasts 后缀自动机