[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 begin
10 y:=a[x,i];
11 if v[y] then continue;
12 v[y]:=true;
13 if (p[y]=0) or (find(p[y])) then
14 begin
15 p[y]:=x;
16 exit(true);
17 end;
18 end;
19 exit(false);
20 end;
21 procedure main;
22 begin
23 readln(n,m);
24 for i:=1 to m do begin readln(a[i,1],a[i,2]);inc(a[i,1]);inc(a[i,2]);end;
25 for i:=1 to m do
26 begin
27 fillchar(v,sizeof(v),false);
28 if not(find(i)) then begin writeln(i-1);halt;end;
29 end;
30 writeln(m);
31 end;
32 begin
33 main;
34 end.

[HNOI2006]超级英雄Hero,布布扣,bubuko.com

时间: 2024-08-02 15:12:30

[HNOI2006]超级英雄Hero的相关文章

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

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

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种不同

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 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回答一道题后,才能进入下一题,否则就被淘汰.为了增加节目的趣味性并适当降低难度,主持人总

bzoj 1191: [HNOI2006]超级英雄Hero

1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #define M 1005 5 using namespace std; 6 int pi[M],n,m,a[M][2],f[M],i; 7 bool xun(int a1) 8 { 9 for(int j=0;j<2;j++) 10 if(!f[a[a1][j]]) 11 { 12 f[a[a1][j]]=1; 13 if(!pi[a[a

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];

BZOJ 1191 [HNOI2006]超级英雄Hero:二分图匹配 匈牙利算法

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 题意: 有m道题,每答对一题才能接着回答下一个问题. 你一道题都不会,但是你有n个"锦囊妙计"(每个只能用一次). 对于每道题,你只能用该题规定的两种锦囊中的一种,来解决这道题. 问你最多能解决多少道题. 题解: 二分图最大匹配. 匈牙利算法. 问题与锦囊匹配. 最大匹配即为最多回答数. 但是题目中要求题目必须连续回答,不能中断. 所以在给每一个问题配对时,一旦匹配不上,

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

裸的匹配题,一眼就能看出来二分图的模型,是某个经典题的改编.貌似某本图论书上讲过的,有N个人以及M个职位,每个职位只能提供给一个人,而每个人由于能力有限只能胜任有限个职位,问是否有办法使得每个人都有工作,如果不能,最多能给多少个人提供工作.如果看过这道经典题的话,这题的思路就顺秒了:将n道题看成n个点属于二分图的x部,将m个锦囊看成m个点属于y部,用匈牙利算法做这个二部图的匹配,当某个点不能匹配时算法结束 值的一说的是,由于这个二部图的特性,x部每个点有且仅有2条边与y部相连,利用这个特性能够大