过山车 邻接表 匈牙利算法
2014-07-23 15:41
281 查看
#include<iostream> #include<cstdio> #include<cstring> #include<vector>
using namespace std; const int maxn=505; int n,m,k; vector<int>G[maxn]; 二维数组存输入的数据不必每个点都遍历效率高
bool vis[maxn]; int match[maxn]; void add(int a,int b){ G[a].push_back(b); } int find(int s){ for(int i=0;i<G[s].size();i++){ int e=G[s][i]; 男生的匹配
if(!vis[e]){ vis[e]=1; while(!match[e]||find(match[e])){ match[e]=s; return true; } } } return false; } int Match(){ int sum=0; for(int i=1;i<=m;i++){ memset(vis,0,sizeof(vis)); if(find(i))sum++; } return sum; } int main(){ while(cin>>k){ if(!k)break; memset(match,0,sizeof(match)); for(int i=0;i<maxn;i++)G[i].clear(); cin>>m>>n; int a,b; for(int i=1;i<=k;i++){ cin>>a>>b; add(a,b); } cout<<Match()<<endl; } return 0; }
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn = 505; int G[maxn][maxn]; int match[maxn]; bool vis[maxn]; int k,m,n; bool find(int s){ for(int j=1;j<=n;j++)if(G[s][j]){ if(!vis[j]){ vis[j]=true; while(!match[j]||find(match[j])){ match[j]=s; return true; } } } return false; } int Match(){ int sum=0; for(int i=1;i<=m;i++){ memset(vis,0,sizeof(vis)); if(find(i))sum++; } return sum; } int main(){ while(cin>>k){ if(!k)break; memset(match,0,sizeof(match)); memset(G,0,sizeof(G)); cin>>m>>n; int a,b; for(int i=1;i<=k;i++) { cin>>a>>b; G[a][b]=1; } cout<<Match()<<endl; } return 0; }
相关文章推荐
- HDOJ 2063 过山车 ——二分图最大匹配(以邻接矩阵,邻接表为数据结构的匈牙利算法)
- 【二分图匹配入门专题1】A - 过山车 hdu2063 【匈牙利算法的模板题】
- HDU 2063 过山车 (二分匹配之匈牙利算法)
- HDU-2063-过山车【匈牙利算法】【二分匹配】
- (HDU2063)过山车(匈牙利算法入门)
- HDU 2063 (匈牙利算法) 过山车
- HDU 2063 过山车 (二分图匹配之匈牙利算法)
- hdu_2063 过山车 匈牙利算法的bfs写法
- hdu 2063 过山车 二分图的最大匹配 匈牙利算法
- hdu 2063过山车-二分图 匈牙利算法
- 匈牙利算法 && EK(邻接表)
- hdu2063 过山车 二分匹配 匈牙利算法
- HDU 2063 过山车 (二分匹配 -匈牙利算法)
- hdoj 2063 过山车(二分图匹配之匈牙利算法)
- HDU 2063 过山车(匈牙利算法)
- HDU 2063 过山车(匈牙利算法)
- hdu 2063 过山车(基础二分图匹配匈牙利算法)
- hdu 2063 过山车 二分图匹配 匈牙利算法 解题报告
- [ACM] HDU 2063 过山车 (二分图,匈牙利算法)
- 匈牙利算法 hdu 2063(过山车)