• hdu 2063 过山车 (二分匹配)


    过山车

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 9445    Accepted Submission(s): 4160


    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
     
    Author
    PrincessSnow
     
    Source
     
    Recommend
    lcy   |   We have carefully selected several similar problems for you:  1083 3360 1507 2065 1528 
     

     二分匹配模板题:

     1 //0MS    1212K    881 B    G++
     2 #include<stdio.h>
     3 #include<string.h>
     4 #define N 505
     5 int g[N][N];
     6 int match[N];
     7 int vis[N];
     8 int t,n,m;
     9 int dfs(int x)
    10 {
    11     for(int i=1;i<=n;i++)
    12         if(!vis[i] && g[x][i]){
    13             vis[i]=1;
    14             if(match[i]==-1 || dfs(match[i])){
    15                 match[i]=x;
    16                 return 1;                
    17             }
    18         }
    19     return 0;
    20 }
    21 int hungary()
    22 {
    23     memset(match,-1,sizeof(match));
    24     int ans=0;
    25     for(int i=1;i<=m;i++){
    26         memset(vis,0,sizeof(vis));
    27         ans+=dfs(i);
    28     }
    29     return ans;
    30 }
    31 int main(void)
    32 {
    33     int a,b;
    34     while(scanf("%d",&t)!=EOF && t)
    35     {
    36         memset(g,0,sizeof(g));
    37         scanf("%d%d",&m,&n);
    38         int tm=0,tn=0;
    39         for(int i=0;i<t;i++){
    40             scanf("%d%d",&a,&b);
    41             g[a][b]=1;
    42         }
    43         printf("%d
    ",hungary());
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    总结前端笔面试遇到的问题——HTML部分
    js中的克隆方法
    js操作cookie
    JS中4种常见的内存泄漏
    html、css、js三者的加载顺序
    js中object定义的几种方法
    关于settimeout的面试题
    css各种居中解决方法
    JS实现继承的几种方式
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/GO-NO-1/p/3729954.html
Copyright © 2020-2023  润新知