Description

一个装备有两个属性,一个装备只能被使用一次,一次使用一种属性。攻击boss时需按属性1、属性2、属性3...属性k的顺序使用,问k最大为多少。

Input

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

Output

输出一行,包括1个数字,表示k。

Sample Input

3
1 2
3 2
4 5

Sample Output

2

HINT

1<=属性值<=10000,N < =1000000

Solution

由于一种装备只能使用一次,而且只有装备和属性值两种分类,就会想到二分图匹配。

将装备和属性值分成两个集合,将属性值向所属装备连一条边,判断当前k,如果可匹配,判断k+1,如果不可行,k-1就是答案。

如果使用匈牙利算法的话,used[]不能每次都重新赋值false,会T(实测),而要将当前k作为判断标志(used[]=k为访问过)。

 #include<set>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define K 10001
#define N 1000001
#define M 2000001
using namespace std;
struct graph{
int nxt,to;
}e[M];
int g[K],u[N],fr[N],n,cnt,ans;
inline int read(){
int ret=;char c=getchar();
while(!(c>=''&&c<=''))
c=getchar();
while(c>=''&&c<=''){
ret=ret*+c-'';
c=getchar();
}
return ret;
}
inline void addedge(int x,int y){
e[++cnt].nxt=g[x];g[x]=cnt;e[cnt].to=y;
}
inline bool match(int k){
for(int i=g[k];i;i=e[i].nxt)
if(u[e[i].to]!=ans){
u[e[i].to]=ans;
if(!fr[e[i].to]||match(fr[e[i].to])){
fr[e[i].to]=k;return true;
}
}
return false;
}
inline void init(){
n=read();
for(int i=,k;i<=n;i++){
k=read();addedge(k,i);
k=read();addedge(k,i);
}
for(ans=;ans<K;ans++){
if(!match(ans)) break;
}
printf("%d\n",--ans);
}
int main(){
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return ;
}

最新文章

  1. iOS多线程之2.NSThread的加锁@synchronized
  2. Linux 内核进程管理之进程ID
  3. [C++] socket -7 [邮槽]
  4. 6、JavaScript进阶篇③——浏览器对象、Dom对象
  5. 两种不同的Context
  6. 网件无线网卡在windows 2012支持问题
  7. android boot.img 结构
  8. Android开发之EditText属性详解
  9. Java 读写XML文件 API--org.dom4j
  10. SharePoint Server 2010安装图解
  11. ubuntu soft install
  12. Unity UI和引用的管理中心
  13. Qt窗口的标题栏自绘
  14. 复习知识点:XML解析数据,JOSN解析数据,GET请求数据,POST请求数据
  15. [Android ADB] An auto-input method for Android and Windows
  16. Android 运行报错 Unknown failure (at android.os.Binder.execTransact(Binder.java:681)) Error while Installing APKs 解决办法
  17. css 小知识点:inline/inline-block/line-height
  18. elasticsearch 二、elasticsearch-head安装
  19. 92. Reverse Linked List II 反转链表 II
  20. 转载 线程初步了解 - &lt;第一篇&gt;

热门文章

  1. Git管理项目实例说明-记录和跟踪项目
  2. 针对苹果最新审核要求为应用兼容IPv6
  3. windows Server 2008各版本区别详解
  4. top状态及其常用技巧
  5. TinyFrame尾篇:整合Spring AOP实现用户认证
  6. Data URI 应用场景小结
  7. GitHub中国区前100名到底是什么样的人?
  8. PHP+mysql数据库开发搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))
  9. sprintf_s的教训
  10. nios II--实验4——按键中断软件部分