题目描述

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

来源:SCOI 2010

所以说这一道题应该非常简单啦

就是说把属性放在左边 编号放在右边 求最大匹配

还是非常好理解哒~~~

#include<bits/stdc++.h>
#define maxn 1000005
using namespace std;
vector<int> v[maxn];
int vis[maxn],hav[maxn];int tim;
bool Dfs(int rt)
{
for(int i=;i<v[rt].size();i++)
{
int to=v[rt][i];
if(vis[to]!=tim)
{
vis[to]=tim;
if(!hav[to]||Dfs(hav[to]))
{
hav[to]=rt;
return true;
}
}
}
return false;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int a,b;scanf("%d%d",&a,&b);
v[a].push_back(i);v[b].push_back(i);
}
int ans=;
for(int i=;i<=n;i++)
{
tim++;
if(Dfs(i)) ans++;
else break;
}
printf("%d",ans);
return ;
}

最新文章

  1. Python for Infomatics 第13章 网页服务一(译)
  2. 我是如何在我的unbuntu 虚拟机上安装 配置QT的
  3. spring记录
  4. window下,加载redis拓展
  5. leap motion
  6. SQL 基本的函数
  7. Oracle Quality --- Setup Collection Element and Collection Plan
  8. [置顶] 有关ListIterator接口的add与remove方法探究
  9. 更改Oracle数据文件名及数据文件存放路径
  10. 在VirtualBox安装OS X 10.10
  11. cmake工具链
  12. ajaxFileUpload.js 无刷新上传图片,支持多个参数同时上传,支持 ie6-ie10
  13. js中的伪数组
  14. 第二章:shiro身份验证
  15. badboy安装及使用
  16. HBase API 基础操作
  17. python学习---装饰器
  18. BZOJ3577:玩手机(最大流,二维ST表)
  19. Spring Boot使用Druid连接池基本配置
  20. wrk 安装使用

热门文章

  1. laravel的Eloquent关联关系
  2. Vue 组件切换
  3. Mockito 使用
  4. H3C IPv6地址配置命令
  5. 高并发WEB服务的演变
  6. I/O 寄存器和常规内存
  7. margin为负值的几种情况
  8. LightOJ - 1284 Lights inside 3D Grid (概率计算)
  9. Little Elephant and Array CodeForces - 220B (莫队)
  10. 【k8s】kubeadm快速部署Kubernetes