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;
}

浙公网安备 33010602011771号