zoukankan      html  css  js  c++  java
  • BZOJ1191:超级英雄(二分图匹配)

    [HNOI2006]超级英雄Hero

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1191

    Description:

    现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的
    多少获得不同数目的奖品或奖金。主持人问题准备了若干道题目,只有当选手正确回答一道题后,才能进入下一题
    ,否则就被淘汰。为了增加节目的趣味性并适当降低难度,主持人总提供给选手几个“锦囊妙计”,比如求助现场
    观众,或者去掉若干个错误答案(选择题)等等。这里,我们把规则稍微改变一下。假设主持人总共有m道题,选
    手有n种不同的“锦囊妙计”。主持人规定,每道题都可以从两种“锦囊妙计”中选择一种,而每种“锦囊妙计”
    只能用一次。我们又假设一道题使用了它允许的锦囊妙计后,就一定能正确回答,顺利进入下一题。现在我来到了
    节目现场,可是我实在是太笨了,以至于一道题也不会做,每道题只好借助使用“锦囊妙计”来通过。如果我事先
    就知道了每道题能够使用哪两种“锦囊妙计”,那么你能告诉我怎样选择才能通过最多的题数吗?
    Input:
    输入文件的一行是两个正整数n和m(0 < n <1001,0 < m < 1001)表示总共有n中“锦囊妙计”,编号为0~n-1,总共有m个问题。
    以下的m行,每行两个数,分别表示第m个问题可以使用的“锦囊妙计”的编号。
    注意,每种编号的“锦囊妙计”只能使用一次,同一个问题的两个“锦囊妙计”可能一样。
    Output:
    第一行为最多能通过的题数p
    Sample Input:
    5 6

    3 2
    2 0

    0 3

    0 4

    3 2

    3 2
    Sample Output:
    4
    题解:
    裸的二分图匹配,一个锦囊对应一个问题,问通过的最大问题数。
     
    代码如下:
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    
    const int N = 1005 ;
    int n,m,ans=0;
    int map[N][N]={0},check[N],matching[N];
    
    inline int dfs(int x){
        for(int i=0;i<n;i++){
            if(map[x][i] &&!check[i]){
                check[i]=1;
                if(matching[i]==-1 || dfs(matching[i])){
                    matching[i]=x;
                    return 1;
                }
            }
        }
        return 0;
    }
    
    int main(){
        cin>>n>>m;
        memset(matching,-1,sizeof(matching));
        for(int i=1,x,y;i<=m;i++){
            cin>>x>>y;
            map[i][x]=map[i][y]=1;
        }
        for(int i=1;i<=m;i++){
            memset(check,0,sizeof(check));
            if(dfs(i)) ans++;
            else break ;
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    Android导出jar包后的资源使用问题
    怎样设计接口?
    自己动手写shell之chgrp,chown,chmod
    妹子图太多怎么看才好,Swing来支招
    Etcd学习(一)安装和.NETclient測试
    js中return false,return,return true的使用方法及区别
    C语言运算符的优先级
    运动物体检测与跟踪——累积权重构建背景模型
    推理集 —— 现场的观察
    推理集 —— 现场的观察
  • 原文地址:https://www.cnblogs.com/heyuhhh/p/9977574.html
Copyright © 2011-2022 走看看