给出每个女生都认识哪些男生 求最多的匹配数
这道题已经将图分为男生和女生两部分 所以我们只存女生认识哪些男生即可
设第i个女生为ui 第i个男生为vi 这样匹配的过程大致就是
看ui认识的vj是否单身 是的话就先配上再说 如果vj已经有伴uk 就看这个伴uk能不能找其他人 不断重复
推荐博客点击打开链接
模板来自啊哈算法
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e2+10;
int e[maxn][maxn];
int book[maxn],match[maxn];
int m,n1,n2;
bool dfs(int cur)
{
int i;
for(i=1;i<=n2;i++){
if(e[cur][i]&&!book[i]){
book[i]=1;
if(match[i]==0||dfs(match[i])){
match[i]=cur;
return 1;
}
}
}
return 0;
}
int hungary()
{
int res,i;
memset(match,0,sizeof(match));
res=0;
for(i=1;i<=n1;i++){
memset(book,0,sizeof(book));
if(dfs(i)) res++;
}
return res;
}
int main()
{
int i,u,v;
while(scanf("%d",&m)!=EOF){
if(m==0) break;
scanf("%d%d",&n1,&n2);
memset(e,0,sizeof(e));
while(m--){
scanf("%d%d",&u,&v);
e[u][v]=1;
}
printf("%d\n",hungary());
}
return 0;
}