hdu2063 最大匹配

 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

posted on 2014-07-16 15:57  xiao_xin  阅读(93)  评论(0)    收藏  举报

导航