zoukankan      html  css  js  c++  java
  • 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
    ",ans);
    73     }
    74     return 0;
    75 }
    View Code
  • 相关阅读:
    (9)springboot+redis实现session共享-copy
    (8)RestTemplate真实案例-copy
    (7)一秒完成springboot与logback配置-copy
    (6)前后端分离之Swagger2-copy
    (5)springboot+druid连接池及监控配置-copy
    (4)springboot不同环境打包-copy
    (3) springboot-多模块构建-copy
    (2)springboot项目快速构建-copy
    oracle查看被锁的表和解锁
    过年回家抢票,让光猫自动重启的小脚本
  • 原文地址:https://www.cnblogs.com/zafuacm/p/3216604.html
Copyright © 2011-2022 走看看