题目描述

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:
复制

  1. 3
  2. 1 2
  3. 3 2
  4. 4 5
输出样例#1: 复制

  1. 2

说明

Limitation

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

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

来源:SCOI 2010

二分图匹配;

对于第 i 种的两个属性 a,b;

连边 <a,i>,<b,i>;

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<string>
  7. #include<cmath>
  8. #include<map>
  9. #include<set>
  10. #include<vector>
  11. #include<queue>
  12. #include<bitset>
  13. #include<ctime>
  14. #include<deque>
  15. #include<stack>
  16. #include<functional>
  17. #include<sstream>
  18. //#include<cctype>
  19. //#pragma GCC optimize(2)
  20. using namespace std;
  21. #define maxn 200005
  22. #define inf 0x7fffffff
  23. //#define INF 1e18
  24. #define rdint(x) scanf("%d",&x)
  25. #define rdllt(x) scanf("%lld",&x)
  26. #define rdult(x) scanf("%lu",&x)
  27. #define rdlf(x) scanf("%lf",&x)
  28. #define rdstr(x) scanf("%s",x)
  29. typedef long long ll;
  30. typedef unsigned long long ull;
  31. typedef unsigned int U;
  32. #define ms(x) memset((x),0,sizeof(x))
  33. const long long int mod = 1e9 + 7;
  34. #define Mod 1000000000
  35. #define sq(x) (x)*(x)
  36. #define eps 1e-3
  37. typedef pair<int, int> pii;
  38. #define pi acos(-1.0)
  39. //const int N = 1005;
  40. #define REP(i,n) for(int i=0;i<(n);i++)
  41. typedef pair<int, int> pii;
  42. inline ll rd() {
  43. ll x = 0;
  44. char c = getchar();
  45. bool f = false;
  46. while (!isdigit(c)) {
  47. if (c == '-') f = true;
  48. c = getchar();
  49. }
  50. while (isdigit(c)) {
  51. x = (x << 1) + (x << 3) + (c ^ 48);
  52. c = getchar();
  53. }
  54. return f ? -x : x;
  55. }
  56.  
  57. ll gcd(ll a, ll b) {
  58. return b == 0 ? a : gcd(b, a%b);
  59. }
  60. int sqr(int x) { return x * x; }
  61.  
  62. /*ll ans;
  63. ll exgcd(ll a, ll b, ll &x, ll &y) {
  64. if (!b) {
  65. x = 1; y = 0; return a;
  66. }
  67. ans = exgcd(b, a%b, x, y);
  68. ll t = x; x = y; y = t - a / b * y;
  69. return ans;
  70. }
  71. */
  72.  
  73. struct node {
  74. int u, v, w;
  75. int nxt;
  76. }edge[maxn<<4];
  77. bool vis[maxn>>1];
  78. int head[maxn>>1];
  79. int match[maxn << 3];
  80. int tot;
  81. void addedge(int x, int y) {
  82. edge[++tot].u = x; edge[tot].v = y;
  83. edge[tot].nxt = head[x]; head[x] = tot;
  84. }
  85.  
  86. bool dfs(int x) {
  87. if (vis[x])return false;
  88. vis[x] = 1;
  89. for (int i = head[x]; i; i = edge[i].nxt) {
  90. int v = edge[i].v;
  91. if (!match[v] || dfs(match[v])) {
  92. match[v] = x; return true;
  93. }
  94. }
  95. return false;
  96. }
  97.  
  98. int main() {
  99. //ios::sync_with_stdio(0);
  100. int n;
  101. rdint(n);
  102. for (int i = 1; i <= n; i++) {
  103. int x, y; rdint(x); rdint(y);
  104. addedge(x, i); addedge(y, i);
  105. }
  106. int ans = 0;
  107. for (int i = 1; i <= 10001; i++) {
  108. ms(vis);
  109. if (dfs(i))ans++;
  110. else break;
  111. }
  112. cout << ans << endl;
  113. return 0;
  114. }

[SCOI2010]连续攻击游戏 BZOJ1854 二分图匹配的更多相关文章

  1. 【题解】 [SCOI2010]连续攻击游戏 (二分图匹配)

    原题目戳我 Solution: 方法很巧妙,我们把每个装备的属性 与 装备编号连起来 从1-10000跑二分图,如果出现断层,就退出,输出答案就好. memset清理bool快一点,int洛谷上超时了 ...

  2. 洛谷P1640 [SCOI2010]连续攻击游戏(二分图)

    题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...

  3. [luoguP1640] [SCOI2010]连续攻击游戏(二分图最大匹配)

    传送门 我们将每一个属性和物品连边,然后枚举从小到大属性跑匈牙利,直到找不到连边 #include <cstdio> #include <cstring> #include & ...

  4. bzoj1854 [Scoi2010]游戏 ([SCOI2010]连续攻击游戏)

    bzoj1854 [Scoi2010]游戏 ([SCOI2010]连续攻击游戏) 据说正解是并查集???我不会 这不是一道匈♂牙利好题吗??? 一个装备的两个属性都向它连边,然后跑一遍匈♂牙利 注意: ...

  5. [SCOI2010]连续攻击游戏 匈牙利算法

    觉得题目水的离开 不会匈牙利的请离开 不知道二分图的请离开 不屑的大佬请离开 ……. 感谢您贡献的访问量 ————————————华丽的分割线———————————— 扯淡完了,先重温一下题目 [SC ...

  6. [Luogu 1640] SCOI2010 连续攻击游戏

    [Luogu 1640] SCOI2010 连续攻击游戏 DP太恶心,回来二分图这边放松一下心智. 这个建图真的是难以想到. 因为要递增啊,属性值放x部,装备放y部,对应连边跑Hungary就好了. ...

  7. 洛谷——P1640 [SCOI2010]连续攻击游戏

    P1640 [SCOI2010]连续攻击游戏 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备 ...

  8. 洛谷 P1640 [SCOI2010]连续攻击游戏 解题报告

    P1640 [SCOI2010]连续攻击游戏 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备 ...

  9. 【BZOJ4554】游戏(二分图匹配,网络流)

    [BZOJ4554]游戏(二分图匹配,网络流) 题解 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个炸弹,看 是否能炸到对手, ...

随机推荐

  1. inux命令学习笔记(13):less 命令

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大. less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面 ...

  2. windows中android SDK manager安装更新sdk很慢,或者出现Done loading packages后不动甚至没有任何可用包

    出现问题: 1.windows中android SDK manager安装更新sdk很慢,或者出现Done loading packages后不动甚至没有任何可用包 2.Failed to fetch ...

  3. android:layout_weight的真实含义/android:layout_gravity的条件

    用layout_weight的时候,不要把宽度(或是高度,你想分配weight的那个)设成match_parent. android:layout_weight只适用于LinearLayout and ...

  4. Javascript常用的设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

  5. Muduo 多线程模型:一个 Sudoku 服务器演变

    陈硕 (giantchen AT gmail) blog.csdn.net/Solstice Muduo 全系列文章列表: http://blog.csdn.net/Solstice/category ...

  6. Oracle 12c 新特性之 PDB 级别闪回数据库

    在Oracle Database 12.1中,闪回数据库操作仅限于 CDB ,Oracle Database 12.2支持 CDB 与 PDB 数据库的闪回. PDB 的还原点种类:1. normal ...

  7. 百度地图设置div样式宽高为百分比不显示地图

    如题,不显示地图只要在样式代码里面加以 position:absolute; 代码就可以了 <style type="text/css"> body, html,#al ...

  8. File:isctype.c Line 68

    刚接触DSP,拿来别人的代码,编译时,发现如下错误: 百思不得琪姐,一番调查之后,发现自己的工程worksapce中有中文路径,怎一个fuck了得.

  9. java基础知识(11)---多线程

    多线程: 进程:正在进行中的程序.其实进程就是一个应用程序运行时的内存分配空间. 线程:其实就是进程中一个程序执行控制单元,一条执行路径.进程负责的是应用程序的空间的标示.线程负责的是应用程序的执行顺 ...

  10. PHP二维数组,根据多个字段来排序

    如果是最最常见的二维数组排序, 大多数情况下也只用到二维: 用php内置函数 array_multisort( )  是最简单的: <?php 假设, $arr 是一个二维数组, $arg1是取 ...