洛谷 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
说明/提示
Limitation
对于30%的数据,保证N < =1000
对于100%的数据,保证N < =1000000
分析
先来一个水过的代码
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
int ma[1000000];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int aa,bb;
scanf("%d%d",&aa,&bb);
if(ma[aa]) ma[bb]++;
else if(ma[bb]) ma[aa]++;
else ma[min(aa,bb)]++;
}
for(int i=1;i<=1000001;i++){
if(!ma[i]){
printf("%d\n",i-1);
return 0;
}
}
return 0;
}
思路大致是读入两个值后,如果有一个在之前已经选过了,那么选另一个,如果都没选过,就挑一个较小的选,要是都选过,就随便选
但是这样显然是不太正确的,比如下面这组数据
4
3 2
4 1
3 1
2 2
正解应该是4,但上面的代码却输出3
正解需要用并查集来解决
每次读入装备的两个值后,如果两个值的祖先节点不相等,我们就将这两个值的祖先节点并在一起,用值较大的祖先节点作为父亲节点,同时将值较小的祖先节点标记为访问过;如果两个值的祖先节点相等,那么我们就将这个祖先节点标记为访问过
那么这种做法和上面的做法区别在哪里呢
其实就是在数据的处理上,比如上面的第二个装备4 1
第一种方法会直接把4丢掉,而第二种方法则会把4记录下来,以为它还有可能对后面的答案做出贡献
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,fa[1000005];
bool vis[1000005];
int zhao(int xx){
if(xx==fa[xx]) return xx;
return fa[xx]=zhao(fa[xx]);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=1000000;i++) fa[i]=i;
for(int i=1;i<=n;i++){
int aa,bb;
scanf("%d%d",&aa,&bb);
int xx=zhao(aa),yy=zhao(bb);
if(xx==yy)vis[xx]=1;
else {
if(xx<yy)swap(xx,yy);
fa[yy]=xx,vis[yy]=1;
}
}
for(int i=1;i<=n+1;i++){
if(!vis[i]){
printf("%d\n",i-1);
break;
}
}
return 0;
}
洛谷 P1640 SCOI2010 连续攻击游戏 并查集的更多相关文章
- 洛谷 P1640 [SCOI2010]连续攻击游戏 解题报告
P1640 [SCOI2010]连续攻击游戏 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备 ...
- 洛谷——P1640 [SCOI2010]连续攻击游戏
P1640 [SCOI2010]连续攻击游戏 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备 ...
- 洛谷P1640 SCOI2010 连续攻击游戏 (并查集/匹配)
本题介绍两种做法: 1 并查集 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1000005; 4 int ...
- 洛谷—— P1640 [SCOI2010]连续攻击游戏
https://www.luogu.org/problem/show?pid=1640 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1, ...
- 洛谷P1640 [SCOI2010]连续攻击游戏(二分图)
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...
- 洛谷P1640 [SCOI2010]连续攻击游戏 题解
题目链接: https://www.luogu.org/problemnew/show/P1640 分析: 这道题用二分图来解决即可.应该可以作为网络流中的模板题来食用, 每一个武器有两个属性,但是只 ...
- [洛谷P1640][SCOI2010]连续攻击游戏
题目大意:有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.每种装备最多只能使用一次,且只能使用其中一种属性.装备所使用的属性值必须从1开始连续.问最多能攻击多少次? ...
- 洛谷 P1640 [SCOI2010]连续攻击问题
洛谷 一句话题意: 每个武器有两种属性,每种武器只能选择一种属性,从属性1连续递增才算攻击,求最大连续攻击次数. 因为同学告诉我这是二分图最大匹配,自然就往那个方向去想. 那么怎么建图呢? 每个武器只 ...
- 洛谷 P1640 【连续攻击游戏】
question bank :luogu question Number :1640 title :Continuous attacking game link :https://www.luogu. ...
随机推荐
- 玩转计划任务命令:schtasks
管理计划任务SCHTASKS /parameter [arguments] 描述: 允许管理员创建.删除.查询.更改.运行和中止本地或远程系统上的计划任务. 参数列表: /Create ...
- 【Spring注解驱动开发】使用@Lazy注解实现懒加载
写在前面 Spring在启动时,默认会将单实例bean进行实例化,并加载到Spring容器中.也就是说,单实例bean默认在Spring容器启动的时候创建对象,并将对象加载到Spring容器中.如果我 ...
- 如何在Centos7安装rabbitmq的PHP扩展
1.先安装rabbitmq-c, wget https://github.com/alanxz/rabbitmq-c/releases/download/v0.8.0/rabbitmq-c-0.8.0 ...
- $.ajax 中的contentType 坑坑
$.ajax 设置数据类型 applicaiton/json之后,服务器端(express)就拿不到数据. $.ajax 中的 contentType 和 dataType: contentType ...
- SSH原理常见应用升级及端口转发
SSH介绍 SSH是Secure Shell Protocol的简写,由IETF网络工作小组(Network working Group)指定:在进行数据传输之前,SSH先对联机数据包通过加密技术进行 ...
- @bzoj - 1921@ [ctsc2010]珠宝商
目录 @description@ @solution@ @accepted code@ @details@ @description@ 简述版题意:给定字符串 S 与一棵树 T,树上每个点有一个字符. ...
- Ubuntu18.04美化MacOS(新更grub界面美化)
写在前面的话: 在美化过程中大多数资源来自境外网站,下载时速度特别慢,写这篇博客一是为了给读者看,也是为了自己保存资源并记录ubuntu18.04的使用,避免你们或是自己以后再花费大量时间去百度方法和 ...
- Redis系列(三):redisServer、redisDb、redisObject、sds四大结构体理解
一.源码下载: Windows中的Redis源码下载:https://github.com/microsoftarchive/redis/tree/3.2 根据官网说明可知,用VS2013编译,但是必 ...
- 消息队列——ActiveMQ使用及原理浅析
文章目录 引言 正文 一.ActiveMQ是如何产生的? 产生背景 JMS规范 基本概念 JMS体系结构 二.如何使用? 基本功能 消息传递 P2P pub/sub 持久订阅 消息传递的可靠性 事务型 ...
- Rust 数据类型
Rust中的每个值都具有特定的数据类型. 基础类型: 整数,浮点数,布尔值和字符 i8,i16,i32,i64,i64,i128,isize, u8,u16,u32,u64,u64,u128,usiz ...