二分图最大匹配算法模板
2017-03-16 21:54
295 查看
定义:把一个图的顶点划分为两个不相交集 U 和 V ,使得每一条边都分别连接U 、 V 中的顶点。如果存在这样的划分,则此图为一个二分图。
问题:
如果在某一对男孩和女孩之间存在相连的边,就意味着他们彼此喜欢。那最多有多少互相喜欢的男孩/女孩可以配对?
模板:
/*
输入k,m,n。分别表示可能的配对数目,女生的人数,男生的人数。
求:
互相喜欢的男女生对数。
*/
#include<cstdio>
using namespace std;
const int maxn =505;
int m,n; /*男生和女生的人数*/
int g[maxn][maxn];/*邻接矩阵,下标从0开始;表示男女生关系*/
int linker[maxn];/*i喜欢的人*/
int visited[maxn];
int dfs(int i)
{
for(int j=0;j<n;j++)
if(g[i][j]&&!visited[j])
{
visited[j]=1;
if(linker[j]==-1||dfs(linker[j]))
{
linker[j]=i;
return 1;
}
}
return 0;
}
int hungary()
{
int res=0;
memset(linker,-1,sizeof(linker));
for(int i=0;i<m;i++)
{
memset(visited,0,sizeof(visited));
if(dfs(i)) res++;
}
return res;
}
int main()
{
// freopen("input.txt","r",stdin);
int a,b,k;
while(~scanf("%d",&k)){
if(k==0) break;
scanf("%d%d",&m,&n);
memset(g,0,sizeof(g));
for(int i=0;i<k;i++){
scanf("%d%d",&a,&b);
g[a-1][b-1]=1;/*表示a,b之间可以配对*/
}
printf("%d\n",hungary());
}
return 0;
}
例题:过山车
问题:
如果在某一对男孩和女孩之间存在相连的边,就意味着他们彼此喜欢。那最多有多少互相喜欢的男孩/女孩可以配对?
模板:
/*
输入k,m,n。分别表示可能的配对数目,女生的人数,男生的人数。
求:
互相喜欢的男女生对数。
*/
#include<cstdio>
using namespace std;
const int maxn =505;
int m,n; /*男生和女生的人数*/
int g[maxn][maxn];/*邻接矩阵,下标从0开始;表示男女生关系*/
int linker[maxn];/*i喜欢的人*/
int visited[maxn];
int dfs(int i)
{
for(int j=0;j<n;j++)
if(g[i][j]&&!visited[j])
{
visited[j]=1;
if(linker[j]==-1||dfs(linker[j]))
{
linker[j]=i;
return 1;
}
}
return 0;
}
int hungary()
{
int res=0;
memset(linker,-1,sizeof(linker));
for(int i=0;i<m;i++)
{
memset(visited,0,sizeof(visited));
if(dfs(i)) res++;
}
return res;
}
int main()
{
// freopen("input.txt","r",stdin);
int a,b,k;
while(~scanf("%d",&k)){
if(k==0) break;
scanf("%d%d",&m,&n);
memset(g,0,sizeof(g));
for(int i=0;i<k;i++){
scanf("%d%d",&a,&b);
g[a-1][b-1]=1;/*表示a,b之间可以配对*/
}
printf("%d\n",hungary());
}
return 0;
}
例题:过山车
相关文章推荐
- 二分图最大匹配匈牙利算法(poj)3041(模板)
- 二分图最大匹配匈牙利算法模板两种
- (模板题)poj 3041 Asteroids(二分图的最大匹配匈牙利算法)
- 二分图最大匹配 匈牙利算法 (自己写的模板)
- 51Nod 飞行员配对(二分图最大匹配)(匈牙利算法模板题)
- 二分图最大匹配之匈牙利算法模板
- [模板] + [详解] - 二分图最大匹配 - 匈牙利算法
- 匈牙利算法,二分图最大匹配、多重匹配模板
- 【模板】匈牙利算法——二分图最大匹配
- NYOJ 题目239 月老的难题 (二分图最大匹配-匈牙利算法模板)
- 二分图最大匹配(匈牙利算法-DFS增广模板)
- 二分图最大匹配算法-匈牙利算法(Hungary)模板
- 【匈牙利算法】二分图最大匹配(模板)
- hihocoder #1122 二分图二•二分图最大匹配之匈牙利算法(*【模板】应用 )
- 二分图最大匹配算法-Hopcroft-Karp模板
- POJ 1469 COURSES【匈牙利算法入门 二分图的最大匹配 模板题】
- 匈牙利算法求二分图的最大匹配/匈牙利算法模板
- 【模板】匈牙利算法 二分图最大匹配题模板
- 二分图最大匹配模板(匈牙利算法)
- 匈牙利算法模板 二分图最大匹配