B1192 [HNOI2006]超级英雄Hero 二分图匹配
先检讨一下,前一段时间开学,做题懒得发博客,也不总结。。。现在捡起来。
这个题一看是裸的二分图匹配,但是仔细一看还有一些区别,就是必须要连续的连接,否则直接退出。因为前一道题答不出来的话后面的题就没有机会了。
顺便练一下匈牙利算法,跑二分图还是很好写的。
题干:
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 HINT Source
代码:
#include<iostream> #include<cstdio> #include<cmath> #include<ctime> #include<queue> #include<algorithm> #include<cstring> using namespace std; #define duke(i,a,n) for(int i = a;i <= n;i++) #define lv(i,a,n) for(int i = a;i >= n;i--) #define clean(a) memset(a,0,sizeof(a)) const int INF = 1 << 30; typedef long long ll; typedef double db; template <class T> void read(T &x) {char c;bool op = 0;while(c = getchar(), c < '0' || c > '9')if(c == '-') op = 1;x = c - '0';while(c = getchar(), c >= '0' && c <= '9')x = x * 10 + c - '0';if(op) x = -x; } template <class T> void write(T x) {if(x < 0) putchar('-'), x = -x;if(x >= 10) write(x / 10);putchar('0' + x % 10); } int line[1005][1005]; int n,m,len = 0,p; int g[1005]; int vis[1005]; bool find(int i) {duke(j,0,n - 1){if(line[i][j] && !vis[j]){vis[j] = 1;if(!g[j] || find(g[j])){g[j] = i;return true;}}}return false; } int main() {read(n);read(m);duke(i,1,m){int x,y;read(x);read(y);line[i][x] = line[i][y] = 1;}int ans = 0;duke(i,1,m){clean(vis);if(find(i))ans++;elsebreak;}write(ans);printf("\n");duke(i,1,ans){printf("%d\n",g[i]);}return 0; } /* 5 6 3 2 2 0 0 3 0 4 3 2 3 2 */
转载于:https://www.cnblogs.com/DukeLv/p/9634020.html
B1192 [HNOI2006]超级英雄Hero 二分图匹配相关推荐
- BZOJ 1191: [HNOI2006]超级英雄Hero 二分图匹配
1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4430 Solved: 2036 [Submit ...
- BZOJ1191: [HNOI2006]超级英雄Hero(二分图匹配)
Time Limit: 10 Sec Memory Limit: 162 MB Submit: 5860 Solved: 2617 [Submit][Status][Discuss] Descri ...
- bzoj #1191 超级英雄(二分图匹配)
引言 据dm说这道题比较简单? 原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 标签:二分图匹配 题意描述 [HNOI2006]超 ...
- bzoj 1191: [HNOI2006]超级英雄Hero
1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4590 Solved: 2106 [Submit ...
- bzoj 1191 [HNOI2006]超级英雄Hero
Description 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的 多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确 ...
- BZOJ 1191 [HNOI2006]超级英雄Hero
题目链接:http://www.zybbs.org/JudgeOnline/problem.php?id=1191 题目大意:有m道题,每道题都对应两种锦囊可以回答对.每种锦囊只能用一次,答对一题继续 ...
- 【bzoj1191】 HNOI2006—超级英雄Hero
http://www.lydsy.com/JudgeOnline/problem.php?id=1191 (题目链接) 题意:有m个问题,n个锦囊妙计,每个锦囊妙计可以解决一个问题,每个问题有两个锦囊 ...
- bzoj1191[HNOI2006]超级英雄Hero
裸的二分图匹配,毕竟是t1,但是主要是有一句题目一旦没办法匹配了就要break,没看到闯关制的我调了好久 #include<iostream> #include<cstdio> ...
- bzoj1191[HNOI2006] 超级英雄Hero
题目链接:bzoj1191 题目大意: 总共有m道题,选手有n种不同的"锦囊妙计".主持人规定,每道题都可以从两种"锦囊妙计"中选择一种,而每种"锦囊 ...
最新文章
- python变量定义类型_03_python的数据类型和变量的定义及使用
- 2012年7月份第4周51Aspx源码发布详情
- python爬虫天气实例scrapy_2017.08.04 Python网络爬虫之Scrapy爬虫实战二 天气预报...
- ubuntu18安装微信
- Python函数的参数
- 学习SQL:INNER JOIN与LEFT JOIN
- pytorch里的nn.Embedding是什么东西?
- 关于使用OpenXml向Excel插入数据的一点总结
- Linux音频驱动-AOSC之Platform
- xstream不映射字段_XStream序列化与反序列化对象
- python量化投资:简介和策略以及研究流程
- 2021阿里淘系工程师推荐书单
- Matlab GUI animatedline 串口实时
- 雷电模拟器连接android studio教程
- AndroidStudio画一条横线
- Apache Avro项目简介
- DVWA sql注入(high)
- java如何判断回文数
- LeetCode知识点总结 - 997
- GAAS 无人机自动驾驶学习(01-使用机载电脑,通过OFFBOARD模式进行控制飞行)