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