#include <stdio.h>
#include <string.h>
#define maxn 505
bool visit[maxn];
int mark[maxn];
int G[maxn][maxn];
int K,n,m;
int path(int u)
{
int i;
for(i=1;i<=m;i++)
{
if(visit[i] || !G[u][i])
continue;
visit[i]=true;
if(!mark[i] || path(mark[i]))
{
mark[i]=u;
return 1;
}
}
return 0;
}
int main()
{
int a,b,count;
while(scanf("%d",&K),K)
{
memset(mark,false,sizeof(mark));
memset(G,0,sizeof(G));
scanf("%d%d",&n,&m);
for(int i=1;i<=K;i++){
scanf("%d%d",&a,&b);
G[a][b]=1;
}
count=0;
for(int i=1;i<=n;i++)
{
memset(visit,false,sizeof(visit));
if(path(i)) count++;
}
printf("%d\n",count);
}
return 0;
}
hdu 过山车(二分图的最大匹配)
最新推荐文章于 2019-11-20 18:27:18 发布