hdu-2063

 

#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
#define max 512
int match[max][max],link[max],v[max],k,n,m;
bool dfs(int x)//深搜遍历,寻找增广路径
{
    for(int i=1;i<=n;i++)
		if(match[x][i] && !v[i])
        {
            v[i]=true;
            if(link[i]==-1 || dfs(link[i]))
            {
                link[i]=x;
                return true;
            }
        }
	return false ;
}

int Xiong()
{
    int cnt=0;
    memset(link,-1,sizeof(link));
    for(int i=1;i<=m;i++)
    {
        memset(v,0,sizeof(v));
        if(dfs(i))                
            cnt++;//找到增广路径则匹配树加1
    }
    return cnt;
}
int main()
{
    int x,y;
    while(scanf("%d",&k) && k)
    {
		memset(match,0,sizeof(match));     
        scanf("%d%d",&m,&n);
        for(int i=1;i<=k;i++)
        {
			scanf("%d%d",&x,&y);
            match[x][y]=1;
        }
        printf("%d\n",Xiong());
    }
    return 0;
}

  

你可能感兴趣的:(hdu-2063)