HDU 2063 过山车(简单二分匹配)

网友投稿 240 2022-11-29

HDU 2063 过山车(简单二分匹配)

题目:​​class="data-table" data-id="t7a7e9d1-TBcIWm3C" data-transient-attributes="class" data-width="802.014px" style="width: 100%; outline: none; border-collapse: collapse;">

Time Limit: 1000MS

 

Memory Limit: 32768KB

 

64bit IO Format: %I64d & %I64u

​​Submit​​​ ​​Status​​

Description

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

Input

输入数据的第一行是三个整数K , M , N,分别表示可能的组合数目,女生的人数,男生的人数。0

Output

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

Sample Input

6 3 3 1 1 1 2 1 3 2 1 2 3 3 1 0

Sample Output

3

Source

RPG专场练习赛

​​Submit​​​ ​​Status​​

传说这是最简单的二分匹配,所以我就拿它作为练习的第一题。本题例子解决的详细过程:

int k,nx,ny;const int N=510;bool bmap[N][N],bmask[N];int cx[N],cy[N];int times=0;bool findpath(int u){ times++; for(int j=1;j<=ny;j++){ if(bmap[u][j]&&!bmask[j]){ // u j 可以匹配 bmask[j]=1; if(cy[j]==-1 || findpath(cy[j])){ //j还没有匹配或者j能得到更大的匹配。 cx[u]=j; cy[j]=u; printf("tiems=%d, (%d,%d)\n",times,u,j); return 1; } } } return 0;}

tiems=1, (1,1)

tiems=3, (1,2)

tiems=3, (2,1)

tiems=5, (2,3)

tiems=5, (3,1)

3

代码:

#include #include #include using namespace std;int k,nx,ny;const int N=510;bool bmap[N][N],bmask[N];int cx[N],cy[N];bool findpath(int u){ for(int j=1;j<=ny;j++){ if(bmap[u][j]&&!bmask[j]){ // u j 可以匹配 bmask[j]=1; if(cy[j]==-1 || findpath(cy[j])){ //j还没有匹配或者j能得到更大的匹配。 cx[u]=j; cy[j]=u; return 1; } } } return 0;}int maxmatch(){ int res=0; memset(cx,-1,sizeof(cx)); memset(cy,-1,sizeof(cy)); for(int i=1;i<=nx;i++){ if(cx[i]==-1){ for(int j=1;j<=ny;j++) bmask[j]=0; res+=findpath(i); } } return res;}int main(){ //freopen("cin.txt","r",stdin); while(cin>>k&&k){ scanf("%d%d",&nx,&ny); memset(bmap,0,sizeof(bmap)); int girl,boy; while(k--){ scanf("%d%d",&girl,&boy); bmap[girl][boy]=1; } printf("%d\n",maxmatch()); } return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:POJ 2513 Colored Sticks(字典树+欧拉路径)
下一篇:使用@RequestBody 接收复杂实体类集合
相关文章

 发表评论

暂时没有评论,来抢沙发吧~