二分匹配的Hopcroft-Carp算法
来源:互联网 发布:中兴和华为知乎 编辑:程序博客网 时间:2024/05/16 21:35
题目:HDU2063 过山车
果然Hopcroft-Carp算法快,用匈牙利算法15ms,而Hopcorft-Carp却0ms。因为匈牙利算法的时间复杂度为O(n*e),而Hopcroft-Carp算法O(sqrt(n)*e)
本算法适合处理大一点的数据。。。。。。
#include <stdio.h>#include <iostream>#include <string.h>#include <queue>const int N=1005;const int INF=1<<28;int g[N][N];int Mx[N];int My[N];int dx[N];int dy[N];bool used[N];int Nx,Ny,dis;bool searchP(){ dis=INF; int i,v,u; std::queue<int> Q; memset(dx,-1,sizeof(dx)); memset(dy,-1,sizeof(dy)); for(i=0;i<Nx;i++) { if(Mx[i]==-1) { Q.push(i); dx[i]=0; } } while(!Q.empty()) { u=Q.front(); Q.pop(); if(dx[u]>dis) break; for(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){ int v; for(v=0;v<Ny;v++) { if(g[u][v]&&!used[v]&&dy[v]==dx[u]+1) { used[v]=true; 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 Hungary(){ int u; int ret=0; memset(Mx,-1,sizeof(Mx)); memset(My,-1,sizeof(My)); while(searchP()) { memset(used,false,sizeof(used)); for(u=0;u<Nx;u++) if(Mx[u]==-1&&DFS(u)) ret++; } return ret;}int main(){ int k,u,v; while(~scanf("%d",&k),k) { scanf("%d%d",&Nx,&Ny); memset(g,0,sizeof(g)); Ny=Nx>Ny? Nx:Ny; while(k--) { scanf("%d%d",&u,&v); u--;v--; g[u][v]=1; } int ans=Hungary(); printf("%d\n",ans); } return 0;}
- 二分匹配的Hopcroft-Carp算法
- 二分匹配的Hopcroft-Carp算法
- 二分匹配的Hopcroft-Carp算法
- 二分图匹配(Hopcroft-Carp的算法) 模版
- Hopcroft-Carp算法模板【二分图匹配】
- 二分图匹配Hopcroft-Carp算法介绍
- hdu2389 Rain on your Parade(二分匹配hopcroft-carp算法)
- 二分图匹配——Hopcroft-Carp算法模板
- HDU2389 Rain on your Parade 二分匹配 Hopcroft-Carp的算法+模版
- HDU 2389 Rain on your Parade (二分图匹配(Hopcroft-Carp的算法模板))
- hdu 2389 Rain on your Parade(二分匹配Hopcroft-Carp算法模版)
- HDU 2389 Rain on your Parade(二分匹配+Hopcroft-Carp算法模板题)
- HDOJ 2389 - Hopcroft-Carp模板二分图最大匹配
- hdu 2063 过山车(Hopcroft-Carp求二分匹配)
- SPOJ Fast Maximum Matching(二分图最大匹配Hopcroft-Carp)
- HDU-2389-Rain on your Parade [二分匹配][Hopcroft-Carp]
- 二分匹配Hopcroft-Karp算法
- hdu 1150 二分图的最大匹配 hopcroft-karp算法
- 两分钟学会在GitHub托管代码
- IplImage结构
- 关于子函数内存分配和链表的一点随笔
- http上传文件的原理
- Java中获取路径的各种方法
- 二分匹配的Hopcroft-Carp算法
- Qt中用户界面的User Interface Compiler(uic)机制的相关说明
- Android ScrollView的使用
- 关于全局变量被修改以及volatile的用法
- ARM处理器模式切换(含MRS,MSR指令)
- html5笔记(1)概述
- 『Android』activity的生命周期
- AD Blocker Trial 注册算法
- imageNamed和dataWithContentsOfFile的区别