• 过山车


    题意 男女匹配,最多组合数

    题解 匈牙利算法

    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<stdio.h>
     2 #include<string.h>
     3 #define N 1000
     4 int map[N][N],visit[N],mark[N];
     5 int k,n,m;
     6 
     7 bool dfs(int u)//寻找从u出发的对应项出的可增广路
     8 {
     9     for(int i=1;i<=n;i++)//(从邻接表中列举u能关联到顶点j)
    10     {
    11         if(map[u][i]&&!visit[i])//i不在增广路上
    12         {
    13             visit[i]=true;//把i加入增广路
    14             if(!mark[i]||dfs(mark[i]))//i是未盖点或从i的对应项出发有可增广路 
    15             {
    16                 mark[i]=u;//修改i的对应项为u
    17                 return true;//则从u的对应项出有可增广路,返回true 
    18             }
    19         }
    20     }
    21     return false;//则从u的对应项出没有有可增广路,返回false 
    22 }
    23 
    24 int main()
    25 {
    26     int i,j,a,b;
    27     while(~scanf("%d",&k)&&k)
    28     {
    29         scanf("%d %d",&m,&n);
    30         for(i=1;i<=m;i++)
    31             for(j=1;j<=n;j++)
    32                 map[i][j]=false;
    33             for(i=1;i<=k;i++)
    34             {
    35                 scanf("%d %d",&a,&b);
    36                 map[a][b]=true;
    37             }
    38             int ans=0;
    39             memset(mark,0,sizeof(mark));
    40             for(i=1;i<=m;i++)
    41             {
    42                 memset(visit,0,sizeof(visit));
    43                 if(dfs(i))
    44                     ans++;//匹配数++ 
    45             }
    46             printf("%d
    ",ans);
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    linux下将可执行程序进行打包
    多节点OpenMPI集群的搭建和使用
    快排
    git 出现:warning: LF will be replaced by CRLF in
    String 根据 第一个逗号去掉逗好后面的内容
    SpringBoot项目中想去掉数据库查询到的数组双括号
    mybatis-plus多条件 or 的使用
    从linux上的docker持久化mysql数据恢复到本地mysql数据库
    @Repository和@Mapper
    JavaScript动画实例:爆裂的粒子
  • 原文地址:https://www.cnblogs.com/awsent/p/4278642.html
Copyright © 2020-2023  润新知