二分图匹配(Hopcroft-Carp的算法) 模版
2013-10-24 18:28
267 查看
/********************************************** 二分图匹配(Hopcroft-Carp的算法)。 初始化:g[][]邻接矩阵 调用:res=MaxMatch(); Nx,Ny要初始化!!! 时间复杂大为 O(V^0.5 E) 适用于数据较大的二分匹配 ***********************************************/ const int MAXN=3001; const int INF=1<<28; int g[MAXN][MAXN],Mx[MAXN],My[MAXN],Nx,Ny; int dx[MAXN],dy[MAXN],dis; bool vst[MAXN]; bool searchP() { queue<int>Q; dis=INF; memset(dx,-1,sizeof(dx)); memset(dy,-1,sizeof(dy)); for(int i=0;i<Nx;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 v=0;v<Ny;v++) if(g[u][v]&&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 v=0;v<Ny;v++) if(!vst[v]&&g[u][v]&&dy[v]==dx[u]+1) { vst[v]=1; if(My[v]!=-1&&dy[v]==dis) continue; if(My[v]==-1||DFS(My[v])) { My[v]=u; Mx[u]=v; return 1; } } return 0; } int MaxMatch() { int res=0; memset(Mx,-1,sizeof(Mx)); memset(My,-1,sizeof(My)); while(searchP()) { memset(vst,0,sizeof(vst)); for(int i=0;i<Nx;i++) if(Mx[i]==-1&&DFS(i)) res++; } return res; }
相关文章推荐
- 二分图匹配(Hopcroft-Carp的算法)模版:
- 二分图匹配Hopcroft-Carp算法介绍
- HDU2389(二分图匹配Hopcroft-Carp算法)
- 二分图匹配——Hopcroft-Carp算法模板
- hdu 2389 Rain on your Parade(二分匹配Hopcroft-Carp算法模版)
- HDU 2389 Rain on your Parade (二分图匹配(Hopcroft-Carp的算法模板))
- HDU2389 Rain on your Parade 二分匹配 Hopcroft-Carp的算法+模版
- Hopcroft-Carp算法模板【二分图匹配】
- HDU 2389 Rain on your Parade(Hopcroft-Carp算法板子题)
- OpenJ_POJ - 1013Excellent Note (二分图最大匹配Hopcroft_carp算法)
- hdu 1054 Strategic Game 匈牙利算法 || Hopcroft-Carp算法
- 【模板】匈牙利算法 二分图匹配 (模版题:洛谷P3386)
- [模板]二分图算法-Hopcroft-Carp
- POJ 3894 System Engineer 二分图匹配 Hopcroft_Carp 最大流
- HDU2389_Rain on your Parade_二分图匹配::Hopcroft-Carp模板题
- ACM HDU 2389 Rain on your Parade(二分匹配 Hopcroft-Carp的算法)
- HDU2063-过山车[Hopcroft-Carp]二分图匹配
- [算法] 匈牙利算法 poj 1274 示例 [ 二分图匹配 入门篇 ] O(n*m) Hopcroft O(sqrt(n)*m)
- HDU 2389 Rain on your Parade(二分匹配,Hopcroft-Carp算法)
- [算法] 匈牙利算法 poj 1274 示例 [ 二分图匹配 入门篇 ] O(n*m) Hopcroft O(sqrt(n)*m)