P1640 [SCOI2010]连续攻击游戏 匈牙利算法
题目描述
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最多能连续攻击的次数。
输入输出样例
3 1 2 3 2 4 5
2
说明
Limitation
对于30%的数据,保证N < =1000
对于100%的数据,保证N < =1000000
左图为装备 右图为boss
然后从boss的1开始遍历 如果匹配不到 那么就return 因为匈牙利是满足之前全部匹配好的!!
二分匹配也恰好满足 左边装备两个属性只能用一次
还有一个wa点是 有两个点死活TLE
可以增加时间戳标记 这样就不用一直memset used了 跑的飞快
#include<bits/stdc++.h> using namespace std; //input by bxd #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define repp(i,a,b) for(int i=(a);i>=(b);--i) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m) #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s); #define ll long long #define pb push_back #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) // #define inf 0x3f3f3f3f const int N=1000000+5; const int M=2000000+5; int head[M],pos,n,m,flag; struct Edge {int nex,to; }edge[M]; void add(int a,int b) {edge[++pos].nex=head[a];head[a]=pos;edge[pos].to=b; } int vis[N],used[N];bool dfs(int x) {for(int i=head[x];i;i=edge[i].nex){int v=edge[i].to;if(flag!=used[v]){used[v]=flag;if(!vis[v]||dfs(vis[v])){vis[v]=x;return true;}}}return false; }int find1() {int ans=0;rep(i,1,10000){flag++;//用时间戳大大加速if(dfs(i))ans++;else return ans;}return ans; }int main() {RI(n);rep(i,1,n){int a,b;RII(a,b);add(a,i);add(b,i);}printf("%d",find1()); }
View Code
并查集:
转载于:https://www.cnblogs.com/bxd123/p/10819672.html
P1640 [SCOI2010]连续攻击游戏 匈牙利算法相关推荐
- 洛谷——P1640 [SCOI2010]连续攻击游戏
P1640 [SCOI2010]连续攻击游戏 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备 ...
- P1640 [SCOI2010]连续攻击游戏:(二分图)
lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...
- P1640 [SCOI2010]连续攻击游戏
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...
- P1640 [SCOI2010]连续攻击游戏 (二分图)
传送门 题面: 题解: 不看标签还是很难想到建图,看了标签也想不到怎么建图. 因为每个数字只能被选择一次,每个装备也只能被选择一次,那么就可以考虑装备与两个属性之间建边. 那么问题就变成了二分图最大匹 ...
- bzoj1854 [Scoi2010]游戏——匈牙利算法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1854 这题...据说可以用并查集做,但没有去看... 用二分图匹配的话,就把装备和它的两个属 ...
- 【洛谷1640】[SCOI2010]连续攻击游戏
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...
- P1129 [ZJOI2007]矩阵游戏 (匈牙利算法)
传送门 题目描述 小 Q 是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个n×n \timesn×n黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次 ...
- [luoguP1640] [SCOI2010]连续攻击游戏(二分图最大匹配)
传送门 我们将每一个属性和物品连边,然后枚举从小到大属性跑匈牙利,直到找不到连边 #include <cstdio> #include <cstring> #include & ...
- 二分图匹配匈牙利算法DFS实现
1 /*==================================================*\ 2 | 二分图匹配(匈牙利算法DFS 实现) 3 | INIT: g[][]邻接矩阵; ...
最新文章
- Wireshark使用技巧:提取VOIP通话中的音频流
- hr2000 光谱Matlab,HR4000 HR2000 HR2000+ 光纤光谱仪 CG HC-1光栅 消除高阶衍射滤光片-广州标旗...
- SQLite中的SELECT子句使用别名
- moss2007 权限体系分析(深入到数据库结构的分析)
- 云原生时代,CNStack 如何解决企业数字化转型难题?
- 自定义SpringBoot start 被依赖时 程序包不存在的问题
- 打印管理 php,window_强化Windows Server 2008下的打印管理, 打印管理从来都是Windows Se - phpStudy...
- css html应用实例1:滑动门技术的简单实现
- [vue] vue怎么实现强制刷新组件?
- 爆火的Java面试题-kafka源码解析与实战豆瓣
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十九) 落雷!治疗!陷阱!连锁闪电!多段群伤!魔法之终极五重奏②...
- 全新卡盟系统PHP版 集成易支付_PHP全新授权系统支持盗版入库卡密授权
- 联想计算机BIOS密码忘记了,联想笔记本CMOS(BIOS)密码清除
- UWP 应用通知Notifications
- 在地化和本土化的区别_本地化和翻译的本质区别在哪里?
- 网络运维工程师 ,需要掌握知识的总结。
- 【论文精读】Parallax-Tolerant Image Stitching Based on Robust Elastic Warping
- SpringBoot整合druid数据源,quartz定式框架
- Project Euler Problem 53: Combinatoric selections【组合数】
- 个人看法---如何做一个视频聊天室?
热门文章
- flex3通过fluorinefx跟asp.net进行数据交互
- 《LeetCode力扣练习》第20题 有效的括号 Java
- Vue:echarts的柱状图怎样按照比例缩小?
- 7万能驱动64位离线_Dism++离线安装.NET Framework 3.5教程
- mysql userstat_mysql 中记录用户登录错误日志方法小结
- url 参数 后台 加密_一套拿来即用的后台管理系统,非常方便(附项目地址)
- sqlalchemy exists 子查询_学好ORM框架SQLAlchemy面试必问
- 怎么做圆一圈圈扩散效果_推广为什么没有效果,网络推广怎么做才有效果?
- oracle创建序列seq起始值为1_oracle 重置序列从指定数字开始的方法详解
- sql join on 多表连接_SQL 多表查询-交叉连接(笛卡尔积)