• 过山车


    过山车

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


    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 <iostream>
     2 #include <cstring>
     3 #include <vector>
     4 #define N 1010
     5 using namespace std;
     6 vector<int> v[N];
     7 int used[N];
     8 bool vis[N];
     9 int k,m,n,cnt=0;
    10 bool find(int x){
    11     for(int i=0;i<v[x].size();i++){
    12         int xx=v[x][i];
    13         if(!vis[xx]){
    14             vis[xx]=true;
    15             if(!used[xx]||find(used[xx])){
    16                 used[xx]=x;
    17                 return true;
    18             }
    19         }
    20     }
    21     return false;
    22 }
    23 
    24 void match(){
    25     for(int i=1;i<=m;i++){
    26         memset(vis,0,sizeof(vis));
    27         if(find(i))
    28             cnt++;
    29     }
    30 }
    31 int main(){
    32     while(cin>>k&&k){
    33         cin>>m>>n;
    34         memset(used,0,sizeof(used));
    35         while(k--){
    36             int x,y;
    37             cin>>x>>y;
    38             v[x].push_back(y+501);
    39         }
    40         match();
    41         cout<<cnt<<endl;
    42         for(int i=1;i<=m;i++)
    43             v[i].clear();
    44         cnt=0;
    45     }
    46 
    47     return 0;
    48 }
     
  • 相关阅读:
    二维码的生成细节和原理
    java写入文件的几种方法分享
    实例讲解虚拟机3种网络模式(桥接、nat、Host-only)
    ARM平台安装Docker的方法
    ARM 平台Docker运行RabbitMQ 以及迁移的简单办法
    Oracle12c(未更新任何补丁) 使用compression=all 参数导出之后导入失败
    CentOS7 通过移植二进制文件的方式安装redis、nginx以及dotnet core的简单办法
    Oracle 以及 达梦数据库简单查询所有表行数的存储过程
    Java内存模型(转载)
    深入探讨 Java 类加载器(转载)
  • 原文地址:https://www.cnblogs.com/zllwxm123/p/8007044.html
Copyright © 2020-2023  润新知