题目描述

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最多能连续攻击的次数。

输入输出样例

输入 #1复制

3
1 2
3 2
4 5
输出 #1复制

2

说明/提示

Limitation

对于30%的数据,保证N < =1000

对于100%的数据,保证N < =1000000

输入 #1复制

3
1 2
3 2
4 5
输出 #1复制

2

说明/提示

Limitation

对于30%的数据,保证N < =1000

对于100%的数据,保证N < =1000000

分析

代码很简单,但是需要思考思考。

将每个装备看做一条边,将装备的属性看做点。将每个装备的两个属性连接成一个集合,依次连成一条链。最后用并查集处理找出根最大的链,输出。。。

注意!!!每次并查集合并时要把属性大的作为根,最后的根最大的链才是答案。

代码

 #include<cstdio>
using namespace std;
const int maxn = 1e4+;
int f[maxn];
bool vis[maxn]; int Find(int x){
return x==f[x]?x:f[x]=Find(f[x]);
} int main(){
int n,a,b;
scanf("%d",&n);
for(int i=;i<=;i++){
f[i]=i;
vis[i]=false;
}
for(int i=;i<=n;i++){
scanf("%d%d",&a,&b);
a=Find(a);
b=Find(b);
if(a==b)vis[a]=true;
if(a>b)f[b]=a; else f[a]=b;
}
int i;
for(i=;i<=;i++){
if(Find(i)==i && vis[i]==false) break;
}
printf("%d\n",i-);
return ;
}

最新文章

  1. Linux autojump命令
  2. ZOJ1655 Transport Goods(Floyd)
  3. HDU 1098 Ignatius&#39;s puzzle 费马小定理+扩展欧几里德算法
  4. WCF WEB API配置
  5. 转....导入excel错误:外部表不是预期的格式 解决方案
  6. 下载doxygen
  7. Python闭包及装饰器
  8. substance的使用示例(转)
  9. 在code first结构下的生成的数据迁移文件,upadate-database失败
  10. maven 教程一 入门
  11. linux守护进程、SIGHUP与nohup详解
  12. Tornado websocket应用
  13. Java中的XML
  14. Scrapy基础(十)———同步机制将Item中的数据写在Mysql
  15. Hash Table (youtube)
  16. LOJ117 有源汇有上下界最小流(上下界网络流)
  17. 实战--利用SVM对基因表达标本是否癌变的预测
  18. dslr control vis usb
  19. #pragma的一些用法
  20. ArcGIS Server命令行工具学习笔记

热门文章

  1. 【zookeeper】安装教程文档需下载
  2. 集合遍历元素的3种方法:for、foreach、迭代器iterator
  3. Java实现 洛谷 采药
  4. Java实现 LeetCode 114 二叉树展开为链表
  5. Java实现第九届蓝桥杯递增三元组
  6. QPS、TPS、并发用户数、吞吐量关系
  7. BFART算法
  8. .NET Web应用中为什么要使用async/await异步编程
  9. spring源码解读-aop
  10. webstorm 快捷键 失效问题