题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2063
解题思路:
二分图最大匹配模板题。
AC代码:
1 #include<stdio.h> 2 int e[1010][1010],match[1010],book[1010],z; 3 int dfs(int u); 4 int main() 5 { 6 int t,n,m,sum,i,j,a,b; 7 while(scanf("%d",&t), t != 0) 8 { 9 scanf("%d%d",&n,&m); 10 z=n+m; 11 for(i=1;i<=z;i++) 12 for(j=1;j<=z;j++) 13 e[i][j]=0; 14 for(i=1;i<=t;i++) 15 { 16 scanf("%d%d",&a,&b); 17 e[a][n+b]=1; 18 } 19 for(i=1;i<=z;i++) 20 match[i]=0; 21 for(sum=0,i=1;i<=z;i++) 22 { 23 for(j=1;j<=z;j++) 24 book[j]=0; 25 if(dfs(i)) 26 sum++; 27 } 28 printf("%d ",sum); 29 } 30 return 0; 31 } 32 int dfs(int u) 33 { 34 int i; 35 for(i=1;i<=z;i++) 36 { 37 if(!book[i] && e[u][i]==1) 38 { 39 book[i]=1; 40 if(!match[i] || dfs(match[i])) 41 { 42 match[i]=u; 43 match[u]=i; 44 return 1; 45 } 46 } 47 } 48 return 0; 49 }