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 @ 2012-03-29 17:59  shijiwomen  阅读(127)  评论(0编辑  收藏  举报