P1640 [SCOI2010]连续攻击游戏
题目描述
lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装备所使用的属性值必须从1开始连续递增地攻击,才能对boss产生伤害。也就是说一开始的时候,lxhgww只能使用某个属性值为1的装备攻击boss,然后只能使用某个属性值为2的装备攻击boss,然后只能使用某个属性值为3的装备攻击boss……以此类推。现在lxhgww想知道他最多能连续攻击boss多少次?
输入输出格式
输入格式:
输入的第一行是一个整数N,表示lxhgww拥有N种装备接下来N行,是对这N种装备的描述,每行2个数字,表示第i种装备的2个属性值
输出格式:
输出一行,包括1个数字,表示lxhgww最多能连续攻击的次数。
输入输出样例
3 1 2 3 2 4 5
2
说明
对于30%的数据,保证N < =1000
对于100%的数据,保证N < =1000000
其实我们这道题的思路很好想的啊。
当然是一种很不好做的思路。
就是将两个属性分成左右部点,这时就会发现我们要处理只能用一次就不那么好办了。
那么我们热动分析一下。
再一下。
然后。
正解就是
所以我们考虑将对于物品 i 的属性 a,b ,分别从 a 和 b 向 i 连一条有向边。将物品的属性当做左部点,编号当做右部点,求最大匹配即可。
vis数组版
奉上代码。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std;const int MA=1000001; int n; int head[MA],ecnt,pre[MA*10]; bool vis[MA]; struct ss{int to,nxt; }t[MA*2];void add(int a,int b) {t[++ecnt].nxt=head[a];t[ecnt].to=b;head[a]=ecnt;return; }bool dfs(int now) {if(vis[now]) return 0;vis[now]=1;for(int i=head[now];i;i=t[i].nxt) {if(!pre[t[i].to]||dfs(pre[t[i].to])) {pre[t[i].to]=now;return 1;}}return 0; }int main() {scanf("%d",&n);for(int i=1;i<=n;i++) {int a,b;scanf("%d%d",&a,&b);add(a,i);add(b,i);}int ans=0;for(int i=1;i<=2*n;i++) {memset(vis,0,sizeof vis);if(dfs(i)) ans++;else break;}cout<<ans<<endl;return 0; }
time优化vis
奉上代码。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std;const int MA=1000001; int n; int head[MA],ecnt,pre[MA*10]; int vis[MA],tim; struct ss{int to,nxt; }t[MA*2];void add(int a,int b) {t[++ecnt].nxt=head[a];t[ecnt].to=b;head[a]=ecnt;return; }bool dfs(int nw) {for(int i=head[nw];i;i=t[i].nxt) {if(vis[t[i].to]!=tim) {vis[t[i].to]=tim;if(!pre[t[i].to]||dfs(pre[t[i].to])) {pre[t[i].to]=nw;return true;}} }return false; }int main() {scanf("%d",&n);for(int i=1;i<=n;i++) {int a,b;scanf("%d%d",&a,&b);add(a,i);add(b,i);}int ans=0;for(int i=1;i<=10000;i++) {tim++;if(dfs(i)) ans++;else break;}printf("%d\n",ans);return 0; }
完成。
谢谢。
转载于:https://www.cnblogs.com/qxyzili--24/p/10620611.html
P1640 [SCOI2010]连续攻击游戏相关推荐
- 洛谷——P1640 [SCOI2010]连续攻击游戏
P1640 [SCOI2010]连续攻击游戏 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备 ...
- P1640 [SCOI2010]连续攻击游戏 匈牙利算法
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...
- P1640 [SCOI2010]连续攻击游戏:(二分图)
lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...
- P1640 [SCOI2010]连续攻击游戏 (二分图)
传送门 题面: 题解: 不看标签还是很难想到建图,看了标签也想不到怎么建图. 因为每个数字只能被选择一次,每个装备也只能被选择一次,那么就可以考虑装备与两个属性之间建边. 那么问题就变成了二分图最大匹 ...
- 【洛谷1640】[SCOI2010]连续攻击游戏
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...
- [luoguP1640] [SCOI2010]连续攻击游戏(二分图最大匹配)
传送门 我们将每一个属性和物品连边,然后枚举从小到大属性跑匈牙利,直到找不到连边 #include <cstdio> #include <cstring> #include & ...
- 【二分图】洛谷P1640连续攻击游戏
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...
- 洛谷P1640 连续攻击游戏 二分图匹配
给出n≤1e6n\leq1e6n≤1e6个装备,每个装备都有两个属性值,它的范围一定在[1,10000][1,10000][1,10000],你每个装备只能选择一个属性值,然后要求出最长的一段从111 ...
- [二分图]luogu 1640 连续攻击游戏
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...
最新文章
- VDI序曲十七 RDVH虚拟主机中开启RemoteFX的硬件配置要求
- 【算法微解读】浅谈线段树
- Oracle 11gR2发布11.2.0.3 Patchset补丁集-又一重量级更新
- 我整理的一个经典分页程序(JSP的)
- Vue源码阅读一:说说vue.nextTick实现
- requests库post方法如何传json类型的data
- jvm中方法区和常量池详解_JVM——内存区域:运行时数据区域详解
- 如何将文件从iPhone或iPad空投到Mac计算机?
- 反编译工具Luyten地址
- PCB寄生电容和寄生电感的计算
- opencv马赛克python实现
- 灵活有效的激励手段-鲶鱼效应
- 管理信息系统复试——三、管理信息系统战略规划与开发方法
- Jikes 研究虚拟机(RVM)一 设计和实现问题
- python3 进程池Pool 详解
- [Win32] 获取进程完整路径
- 明万历年间抗击倭寇援朝战役
- Linux 如何查看内存使用情况
- i tell you 微软各种 操作系统 应用程序 开发工具 下载
- 计算机语言mid是什么意思,MID是什么
热门文章
- zabbix agent安装_OpenSUSE RPM安装 zabbix-agent
- 在计算机回收站中可以恢复,电脑回收站删除了怎么恢复吗
- 用vb6.0查看计算机用户名,如何使用vb6.0输入登录窗口的用户名和密码?
- pattern in java_Java里的生产者-消费者模型(Producer and Consumer Pattern in Java)
- 传感器怎么获取障碍物的宽度信息_机器人感知 -- 测距传感器
- 什么相片可以两张弄成一张_怎么将两张图片合成一张?
- android 文件上传工具类,Android快速开发架构PlanA(五),文件上传下载了解一下...
- SqlServer2000中作业无法删除的原因和解决办法
- Dataframe 新增一列, apply 通用方法
- ansible笔记(8):常用模块之系统类模块(二)