bzoj1191 HNOI2006 超级英雄

题意:现在有 n 个锦囊,m 个问题;每个问题可以被 2 个锦囊解答,且每个锦囊这能回答一道问题;求最多能答对几个问题。

题解:模型 -> 二分图的最大匹配;核心算法 -> 匈牙利算法(模版题)。

CODE:

/*
Author: JDD
PROG: bzoj1191 超级英雄
DATE: 2015.9.24
*/

#include <cstdio>
#include <cstring>
#define REP(i, s, n) for(int i = s; i <= n; i ++)
#define REP_(i, s, n) for(int i = n; i >= s; i --)
#define MAX_N 1005

using namespace std;

int n, m;
int link[MAX_N][MAX_N], G[MAX_N];
bool used[MAX_N];

void init()
{
    scanf("%d%d", &n, &m);
    memset(link, 0, sizeof(link));
    memset(G, 0, sizeof(G));
    REP(i, 1, m){
        int x, y; scanf("%d%d", &x, &y),
        x ++, y ++;
        link[i][x] = 1; link[i][y] = 1;
    }
}

bool find(int x)
{
    REP(j, 1, n){
        if (link[x][j] == true && used[j] == false){
            used[j]=1;
            if (G[j] == 0 || find(G[j])){
                G[j] = x;
                return true;
            }
        }
    }
    return false;
}

void doit()
{
    int ans = 0;
    REP(i, 1, m){
        memset(used, 0, sizeof(used));
        if(find(i)) ans ++;
            else break;
    }
    printf("%d\n", ans);
}

int main()
{
    init();
    doit();
    return 0;
}
时间: 2024-08-24 12:06:56

bzoj1191 HNOI2006 超级英雄的相关文章

bzoj1191: [HNOI2006]超级英雄Hero

二分图最大顺序匹配. 拿题目编号和锦囊编号建二分图,跑匈牙利算法. #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 2000 + 10; const int maxm = 4000 + 10; int n,m,e; int v[maxn],next[maxm],h[maxn]; int p[maxn]; bool vis[maxn];

【二分图】【最大匹配】【匈牙利算法】bzoj1191 [HNOI2006]超级英雄Hero

裸的最大匹配. 1 #include<cstdio> 2 #include<vector> 3 #include<cstring> 4 using namespace std; 5 vector<int>G[2002]; 6 typedef vector<int>::iterator ITER; 7 int n,m,mat[2002],x,y; 8 bool vis[2002]; 9 bool dfs(int U) 10 { 11 for(ITE

BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)

云神说他二分图匹配从来都是用网络流水过去的...我要发扬他的精神.. 这道题明显是二分图匹配.网络流的话可以二分答案+最大流.虽然跑得很慢.... ---------------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostrea

[HNOI2006]超级英雄 网络流+二分版

刚学网络流的我这里有一道非常好的"网络流练手题"------[HNOI2006]超级英雄. 记得很久以前真的有这个节目来着,还是大兵主持的. 其实这是一道匈牙利板子大水题,但对于我们这种刚学网络流的 juruo 碰到什么题不用网络流做就非常的不爽,于是就有了这个 超级英雄 网络流+二分版. 这里直接二分答案,每次将源点和所有的锦囊连边,容量为1;再将锦囊和对应的问题连边,容量为1;最后是将问题和汇点T连边,容量还是1.然后跑一波Dinic,看是否满流,这道"网络流练手题就搞定

1191: [HNOI2006]超级英雄Hero

1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1996  Solved: 946[Submit][Status] Description 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回答一道题后,才能进入下一题,否则就被淘汰.为了增加节目的趣味性并适当降低难度,主持人总

1191: [HNOI2006]超级英雄Hero 二分图匹配(?)

1191: [HNOI2006]超级英雄Hero Description 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回答一道题后,才能进入下一题,否则就被淘汰.为了增加节目的趣味性并适当降低难度,主持人总提供给选手几个"锦囊妙计",比如求助现场观众,或者去掉若干个错误答案(选择题)等等. 这里,我们把规则稍微改变一下.假设主持人总共有m道题,选手有n种不同

[HNOI2006]超级英雄Hero

这题一看就应该知道是二分图匹配-- 我记得有个类似的题有一个并查集的解法,但是我找不到了-- 1 var i,n,m:longint; 2 p:array[0..1500] of longint; 3 v:array[0..1500] of boolean; 4 a:array[0..1500,1..2] of longint; 5 function find(x:longint):boolean; 6 var i,y:longint; 7 begin 8 for i:=1 to 2 do 9

BZOJ 1191: [HNOI2006]超级英雄Hero 二分匹配

1191: [HNOI2006]超级英雄Hero Description 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回答一道题后,才能进入下一题,否则就被淘汰.为了增加节目的趣味性并适当降低难度,主持人总提供给选手几个“锦囊妙计”,比如求助现场观众,或者去掉若干个错误答案(选择题)等等. 这里,我们把规则稍微改变一下.假设主持人总共有m道题,选手有n种不同的“锦囊妙

bzoj 1191: [HNOI2006]超级英雄Hero 并查集 || 匈牙利算法

1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1804  Solved: 850[Submit][Status] Description 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回答一道题后,才能进入下一题,否则就被淘汰.为了增加节目的趣味性并适当降低难度,主持人总