hdu 2063 二分图 水题 最多多少组合数

基础二分图应用,注意理解

#include <stdio.h>
#include <string.h>
 
int k,m,n,a[501][501];
 
int visit[501];
 
int linker[501];
 
int dfs(int u)
{
    int i;
 
    //visit[u]=1;
 
    for(i=1;i<=n;i++)
    {
        if(a[u][i]&&!visit[i])
        {
            visit[i]=1;
            if(linker[i]==-1||dfs(linker[i]))
            {
                linker[i]=u;
                return 1;
            }
        }
    }
     
 
    return 0;
}
 
int main()
{
    int start,end,res,i;
 
    while(scanf("%d",&k),k)
    {
        scanf("%d%d",&m,&n);
 
        memset(a,0,sizeof(a));
 
        for(i=1;i<=k;i++)
        {
            scanf("%d%d",&start,&end);
            a[start][end]=1;
        }
 
        memset(linker,-1,sizeof(linker));
 
        res=0;
 
        for(i=1;i<=m;i++)
        {
            memset(visit,0,sizeof(visit));
 
            if(dfs(i))
                res++;
        }
        printf("%d\n",res);
    }
 
    return 0;
}

  

posted @   shijiwomen  阅读(127)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示