Description

lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。 游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装备所使用的属性值必须从1开始连续递增地攻击,才能对boss产生伤害。也就是说一开始的时候,lxhgww只能使用某个属性值为1的装备攻击boss,然后只能使用某个属性值为2的装备攻击boss,然后只能使用某个属性值为3的装备攻击boss……以此类推。 现在lxhgww想知道他最多能连续攻击boss多少次?

Input

输入的第一行是一个整数N,表示lxhgww拥有N种装备 接下来N行,是对这N种装备的描述,每行2个数字,表示第i种装备的2个属性值

Output

输出一行,包括1个数字,表示lxhgww最多能连续攻击的次数。

Sample Input

3
1 2
3 2
4 5

Sample Output

2

HINT

【数据范围】
对于30%的数据,保证N < =1000
对于100%的数据,保证N < =1000000

/*
二分图匹配
但是O(n*m)的复杂度好像过不去,但是神奇的AC了,还跑得很快,玄学啊!
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 1000010
using namespace std;
int head[N],used[N],bl[N],n,T;
struct node{
int v,pre;
}e[N*];
void add(int i,int u,int v){
e[i].v=v;e[i].pre=head[u];head[u]=i;
}
bool find(int x){
for(int i=head[x];i;i=e[i].pre){
if(used[e[i].v]==T) continue;
used[e[i].v]=T;
if(!bl[e[i].v]||find(bl[e[i].v])){
bl[e[i].v]=x;
return true;
}
}
return false;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
int x,y;scanf("%d%d",&x,&y);
add(i*-,x,i);add(i*,y,i);
}
int i;
for(i=;i<=;i++){
++T;
if(!find(i)) break;
}
printf("%d",i-);
return ;
}
/*
官方题解:并查集。
对于一个武器,让一个属性a向另一个属性b连边。
如果一个p个点的连通块是一棵树,那么p-1个点符合要求。
如果一个p个点的连通块有环,那么p个点都符合要求。
我们用一个vis数组维护。
如果合并的是两个连通块,那么就把小的连通块合并到大的上面,并让小连通块的顶点vis=true。
否则,让该连通块的顶点vis=true。
这样就可以保证,如果一个大小为N联通块由N-1条边构成时,最大点的vis=false,其他为true。
由多于N条边构成时,所有点的vis=true。
然后最后只要一次扫描vis就可以得出答案了
*/
#include<iostream>
#include<cstdio>
#define N 10010
using namespace std;
int vis[N],fa[N],n;
int find(int x){
if(x==fa[x]) return x;
return fa[x]=find(fa[x]);
}
int main(){
scanf("%d",&n);
for(int i=;i<=;i++) fa[i]=i;
for(int i=;i<=n;i++){
int x,y,a,b;scanf("%d%d",&x,&y);
a=find(x);b=find(y);
if(a==b) vis[a]=;
else {
if(a>b) swap(a,b);
vis[a]=;
fa[a]=b;
}
}
for(int i=;i<=;i++)
if(!vis[i]){
printf("%d",i-);
break;
}
return ;
}

最新文章

  1. 在页面使用js回车键
  2. 图说hibernate注释--java里配置参数(一.1)
  3. ThinkPHP3.2.3 安装教程
  4. loj 1168(Tarjan应用)
  5. 几种php 删除数组元素方法
  6. mysql 创建存储过程注意
  7. 在开发板Linux上挂载&quot;驱动&quot;挂载不成功,出现提示server 172.27.52.100 not responding, still trying
  8. LeetCode: Maximum Product Subarray &amp;&amp; Maximum Subarray &amp;子序列相关
  9. Rman实现数据库迁移
  10. hadoop-1.2.0安装记录
  11. 关于MD5校验和java工程下的校验
  12. Java中printStackTrace()、toString()、getMessage()的区别
  13. PowerDesigner 的7种建模文件
  14. Java 内部类 this
  15. Codeforces Education Round 11
  16. 201521123084 《Java程序设计》第5周学习总结
  17. Sigmoid函数简介
  18. 判断api请求方式
  19. AJAX异步传输——以php文件传输为例
  20. Ubuntu 14.10 下Spark on yarn安装

热门文章

  1. XML格式与实体类的转换
  2. SAP后台JOB的Submit &amp; EVENT JOB
  3. vue 网页文字中带#的话题颜色高亮
  4. tp5 使用paginate分页获取数据对象之后 如何对对象进行数据添加
  5. Jack Straws POJ - 1127 (简单几何计算 + 并查集)
  6. Xenia and Bit Operations CodeForces - 339D
  7. A1025 PAT Ranking (25)(25 分)
  8. Spring Boot 开发系列一 开发环境的一些九九
  9. easyui的layout
  10. SpringMVC基本概念