题目描述:

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

solution:

此题可以用匈牙利算法,虽然理论上会T,但还是可以过得。。。

若第I个装备有属性A,B,则在A,I和B,I中间连一条边,应为一个装备只能用一次,又有要求连续,可以想到匈牙利算法,且只要有一个点不符合就break。

前几次提交都T:

可能原因 :

1.数组开太大。。。

2.没用printf

3.没写register。。。

反正提交7次后A了(我还是太菜了)

代码:

// luogu-judger-enable-o2
#include<bits/stdc++.h>using namespace std;const int MAXM = 2000001;inline int read()
{int f=1,x=0;char ch;do{ch=getchar();if(ch=='-') f=-1;}while(ch<'0'||ch>'9');do{x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');return f*x;
}int n;struct node
{int to;int next;
};node g[MAXM];int head[MAXM/2],tot=0;inline void addedge(int u,int v)
{++tot;g[tot].to=v;g[tot].next=head[u];head[u]=tot;return;
}int p[MAXM/2];bool vis[MAXM/2];int ans=0;inline bool dfs(int i)
{for(register int j=head[i];j>=0;j=g[j].next){int v=g[j].to;if(!vis[v]){vis[v]=true;if(p[v]==0||dfs(p[v])){p[v]=i;return true;}}}return false;
}int main()
{n=read();for(register int i=1;i<=10000;i++){head[i]=-1;    }    for(register int i=1;i<=n;i++){int x,y;x=read();y=read();addedge(x,i);addedge(y,i);}for(register int i=1;i<=10000;i++){memset(vis,false,sizeof(vis));if(dfs(i)) ans++;else break;}printf("%d",ans);
}

转载于:https://www.cnblogs.com/wlzs1432/p/8849578.html

[SCOI2010]连续攻击游戏相关推荐

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

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

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

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

  3. P1640 [SCOI2010]连续攻击游戏

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

  4. 【洛谷1640】[SCOI2010]连续攻击游戏

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

  5. P1640 [SCOI2010]连续攻击游戏:(二分图)

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

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

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

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

    传送门 题面: 题解: 不看标签还是很难想到建图,看了标签也想不到怎么建图. 因为每个数字只能被选择一次,每个装备也只能被选择一次,那么就可以考虑装备与两个属性之间建边. 那么问题就变成了二分图最大匹 ...

  8. 【二分图】洛谷P1640连续攻击游戏

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

  9. [二分图]luogu 1640 连续攻击游戏

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

  10. Luogu1640 连续攻击游戏

    并查集的做法 暂时还不会. 二分图 思路很可以 超时的问题:即使把vis改成bool还是超,于是了解了"时间戳"QwQ(还是很好理解的) 原来memset真的还是挺费时间的 所以二 ...

最新文章

  1. 独家 | Python的“predict_prob”方法不能真实反映预测概率校准(如何实现校准)...
  2. lambda函数详解
  3. Thymeleaf——访问静态资源(static)解决方案
  4. nssl1296-猫咪的进化【dp】
  5. java数组数据结构_Java数据结构之数组
  6. 关于asp.net上传图片自动生成缩略图
  7. DPDK-VPP 学习笔记-04 Load Balancer plugin nat4 PATCH
  8. 雪球产品定价-蒙特卡罗模拟法
  9. RFC 2544阅读笔记
  10. UM2 3D 打印机 DIY 实践 (1)结构篇
  11. FAT32文件系统格式详解(图文针对具体文件存储,分析fat32 SD卡)
  12. 互联网+时代的7个引爆点(读书笔记)
  13. 康师傅红烧牛肉面:守护平凡英雄,成就烟火人生
  14. 适合打游戏的计算机,最适合玩游戏的笔记本电脑 广受好评的三款笔记本
  15. linux for 迅雷,关于迅雷for linux
  16. 关于怎么学习好一门技术一门语言
  17. 利用pytesser识别简单图形验证码
  18. 2022CCF中国软件大会(CCF ChinaSoft)“系统软件教育”论坛成功召开
  19. setHeader方法的参数说明
  20. JS中children与childNodes的区别

热门文章

  1. linux下面修改默认的shell
  2. 创造or变革:卡萨帝为何能重塑高端品质生活?
  3. Python如何输出格式清晰的dict
  4. android UI进阶之布局的优化
  5. 如何让你的硬盘更快,系统更稳定!
  6. java 读取excel文件
  7. 每日记载内容总结46
  8. Sass基础——Rem与Px的转换
  9. NHibernate.Cfg.HibernateConfigException
  10. python importlib