过山车 HDU

来源:互联网 发布:网络知识视频教程 编辑:程序博客网 时间:2024/04/27 19:23

点击打开链接

给出每个女生都认识哪些男生 求最多的匹配数

这道题已经将图分为男生和女生两部分 所以我们只存女生认识哪些男生即可

设第i个女生为ui 第i个男生为vi 这样匹配的过程大致就是

看ui认识的vj是否单身 是的话就先配上再说 如果vj已经有伴uk 就看这个伴uk能不能找其他人 不断重复

推荐博客点击打开链接

模板来自啊哈算法

#include <bits/stdc++.h>using namespace std;int e[510][510];int match[510],book[510];int m,n1,n2;int dfs(int cur){    int i;    for(i=1;i<=n2;i++)    {        if(e[cur][i]==1&&book[i]==0)        {            book[i]=1;            if(match[i]==0||dfs(match[i]))            {                match[i]=cur;                return 1;            }        }    }    return 0;}int hungary(){    int ans,i;    memset(match,0,sizeof(match));    ans=0;    for(i=1;i<=n1;i++)    {        memset(book,0,sizeof(book));        if(dfs(i)) ans++;    }    return ans;}int main(){    int i,u,v,maxx;    while(scanf("%d",&m)!=EOF)    {        if(m==0) break;        scanf("%d%d",&n1,&n2);        memset(e,0,sizeof(e));        for(i=1;i<=m;i++)        {            scanf("%d%d",&u,&v);            e[u][v]=1;        }        maxx=hungary();        printf("%d\n",maxx);    }    return 0;}

原创粉丝点击