【BZOJ 1854】【SCOI 2010】游戏【并查集 & 二分图匹配】
来源:互联网 发布:autodesk123d for mac 编辑:程序博客网 时间:2024/06/06 01:14
Description
lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。 游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装备所使用的属性值必须从1开始连续递增地攻击,才能对boss产生伤害。也就是说一开始的时候,lxhgww只能使用某个属性值为1的装备攻击boss,然后只能使用某个属性值为2的装备攻击boss,然后只能使用某个属性值为3的装备攻击boss……以此类推。 现在lxhgww想知道他最多能连续攻击boss多少次?
Input
输入的第一行是一个整数N,表示lxhgww拥有N种装备 接下来N行,是对这N种装备的描述,每行2个数字,表示第i种装备的2个属性值
Output
输出一行,包括1个数字,表示lxhgww最多能连续攻击的次数。
题解
一、二分图匹配
每个武器向两个属性连边 然后从1~10000枚举属性 跑二分图最大匹配 无法匹配则输出答案
(自己没写)
二、并查集
我们可以把一件武器看成一条边,两个属性看成两个点。
当读入每一个a,b时,我们找到两个点的祖先节点,fa,fb,并且要保证祖先节点在该连通块中编号(装备属性)最大(仔细看后面怎么保证),用vis[i]数组记录能否过第I关
① fa == fb
这种情况就是加入这条边之后,图中成了一个环(可能这个环之前就存在),那么对于一个环,假设是1~x节点的环,我们肯定可以全选择(题目中的选择),之前假设是一颗树的话,X个节点,我们可以选择x-1个,也就是只有一个点选不了,我们肯定让最大的点没法选,所以除了祖先以外应该全都是true,那么加上这条边之后,祖先也可以选了,所以将祖先也就是vis[fa]设成true
② fa != fb
这种情况就是一条边连接两个连通分量,
先假设两个连通分量都是树,那么我们这个新的连通分量也是一颗树,对于这种情况,我们可以多选择一个没选过的点,也就是在fa,fb中选编号小的设成true。
那么如果两个环的话,这条边就没用了,之前已经可以全选了。
那一个环一个树的情况,新的联通分量依旧有环,所以直接使vis[fa] = vis[fb] = true。
代码
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int f[1000010];int n,a,b,x,y;bool vis[1000010];int find(int x){ return x == f[x] ? x : f[x] = find(f[x]);}int main(){ scanf("%d",&n); for(int i = 1;i <= n+1;i++) f[i] = i; memset(vis,false,sizeof(vis)); for(int i = 1;i <= n;i++) { scanf("%d%d",&a,&b); x = find(a); y = find(b); if(x == y) vis[x] = true; else { if(x > y) swap(x,y); f[x] = y; if(!vis[x] && !vis[y]) vis[x] = true; else vis[x] = vis[y] = true; } } for(int i = 1;i <= n+1;i++) if(!vis[i]){printf("%d\n",i-1);break;} return 0;}
- 【BZOJ 1854】【SCOI 2010】游戏【并查集 & 二分图匹配】
- BZOJ 1854 SCOI 2010 游戏 二分图最大匹配
- [BZOJ 1854] SCOI 2010 游戏 · 二分图匹配
- [BZOJ 1854][SCOI 2010]游戏(二分图最大匹配)
- BZOJ 1854|SCOI 2010|游戏|并查集
- BZOJ-1854 游戏 二分图匹配 (并查集)
- BZOJ 1854 SCOI2010 游戏 二分图最大匹配/并查集
- BZOJ 1854: [Scoi2010]游戏 二分图匹配or并查集
- BZOJ 1854: [Scoi2010]游戏 【二分图】【并查集】
- [BZOJ]1854 [SCOI]2010 游戏
- BZOJ1854 [Scoi2010]游戏(并查集/二分图匹配)
- bzoj1854 [Scoi2010]游戏 并查集/二分图最大匹配
- BZOJ 1854 二分图匹配 (时间戳优化匈牙利 ) 并查集
- BZOJ 1854 [Scoi 2010] 二分图 解题报告
- BZOJ 1854 游戏(二分图匹配)
- 【bzoj 1854】[Scoi2010]游戏 二分图匹配
- bzoj #1854 游戏(二分图匹配)
- BZOJ 1854: [Scoi2010]游戏 二分图匹配
- YYModel 源码解析
- Android获取昨天今天明天后天代码实现。以及月份前去掉前缀0
- [编译]Makefile兼APUE解析(UNP12)
- Relief 特征选择算法简单介绍
- 正则表达式学习笔记
- 【BZOJ 1854】【SCOI 2010】游戏【并查集 & 二分图匹配】
- mac环境下mysql插入中文字符串报错问题解决
- json与字符串转换
- Java
- |算法讨论|并查集 学习笔记
- 算法思想汇总(java实现)【持续更新中】
- mybatis传set参数
- Java到底是传引用还是传值?深度剖析
- C#基础知识之基础概述