1 #include<stdio.h>
2 #include<string.h>
3 int g[505][505],y[505],link[505],n1,n2;
4 int find(int x)
5 {
6 int i;
7 for (i=1;i<=n2;i++)
8 if (g[x][i]==1&&y[i]==0)
9 {
10 y[i]=1;
11 if (link[i]==0||find(link[i]))
12 {
13 link[i]=x;
14 return 1;
15 }
16 }
17 return 0;
18 }
19 int main()
20 {
21 int k,i,a,b,ans;
22 while (~scanf("%d",&k)&&(k!=0))
23 {
24 scanf("%d%d",&n1,&n2);
25 memset(link,0,sizeof(link));
26 memset(g,0,sizeof(g));
27 ans=0;
28 for (i=1;i<=k;i++)
29 {
30 scanf("%d%d",&a,&b);
31 g[a][b]=1;
32 }
33 for (i=1;i<=n1;i++)
34 {
35 memset(y,0,sizeof(y));
36 if (find(i)) ans++;
37 }
38 printf("%d\n",ans);
39 }
40 }
http://acm.hdu.edu.cn/showproblem.php?pid=2063