HDU2063--过山车

过山车
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7110 Accepted Submission(s): 3098


Problem Description
RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了。可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐。但是,每个女孩都有各自的想法,举个例子把,Rabbit只愿意和XHD或PQK做partner,Grass只愿意和linle或LL做partner,PrincessSnow愿意和水域浪子或伪酷儿做partner。考虑到经费问题,boss刘决定只让找到partner的人去坐过山车,其他的人,嘿嘿,就站在下面看着吧。聪明的Acmer,你可以帮忙算算最多有多少对组合可以坐上过山车吗?


Input
输入数据的第一行是三个整数K , M , N,分别表示可能的组合数目,女生的人数,男生的人数。0<K<=1000
1<=N 和M<=500.接下来的K行,每行有两个数,分别表示女生Ai愿意和男生Bj做partner。最后一个0结束输入。


Output
对于每组数据,输出一个整数,表示可以坐上过山车的最多组合数。


Sample Input
6 3 3
1 1
1 2
1 3
2 1
2 3
3 1
0


Sample Output
3

 

最大匹配求组合数

 1 #include<cstdio>
 2 #include<string>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<cmath>
 6 #include<cstring>
 7 using namespace std;
 8 
 9 int link[1001][1001];
10 int cx[1001];
11 int cy[1001];
12 int mk[1001];
13 
14 int m,nx,ny;
15 
16 void init()
17 {
18     memset(cx,0xff,sizeof(cx));
19     memset(cy,0xff,sizeof(cy));
20     memset(link,0,sizeof(link));
21     memset(mk,0,sizeof(mk));
22 }
23 
24 int path(int u)
25 {
26     int v;
27     for(v=1;v<=ny;v++)
28     {
29         if(!mk[v]&&link[u][v])
30         {
31             mk[v]=1;
32             if(cy[v]==-1||path(cy[v]))
33             {
34                 cx[u]=v;
35                 cy[v]=u;
36                 return 1;
37             }
38         }
39     }
40     return false;
41 }
42 
43 int maxmatch()
44 {
45     int i;
46     int sum=0;
47     for(i=1;i<=nx;i++)
48     {
49         if(cx[i]==-1)
50         {
51             memset(mk,0,sizeof(mk));
52             sum+=path(i);
53         }
54     }
55     return sum;
56 }
57 
58 int main()
59 {
60     while(scanf("%d",&m)!=EOF)
61     {
62         if(!m)break;
63         init();
64         scanf("%d%d",&nx,&ny);
65         while(m--)
66         {
67             int u,v;
68             scanf("%d%d",&u,&v);
69             link[u][v]=1;
70         }
71         int ans=maxmatch();
72         printf("%d\n",ans);
73     }
74     return 0;
75 }
View Code

 

posted on 2013-07-26 10:46  张狂不年轻°  阅读(185)  评论(0编辑  收藏  举报