bzoj1854 [Scoi2010]游戏【构图 并查集】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1854
没想到怎么做真是不应该,看到每个武器都有两个属性,应该要想到连边构图的!太不应该了!
构图之后,显然,一个有n个点的联通块要么有n - 1条边,要么有>=n条边(因为可能有重边)。由于一把武器只能使用一次,也就是说一条边只能“属于”其连接的两个点的其中一个。当有n - 1条边时,这时一棵树,这棵树里的边可以满足任意的n - 1个点,因为随便找一个点拉成有根树,使每一条边都“属于”其儿子节点就行了。那么这种情况是不是真的要“随便找一个点”呢?实则不然。因为题目要求了,要按照顺序打boss,所以应该尽量让编号更小的点得到一条边,所以应该让编号最大的点成为树根,对应程序里,在并查集union操作时,应该让编号较小的成为编号较大的儿子,然后标记编号较小的节点。当有>= n条边时,很显然所有点都可以得到一条边,岂不美哉?对应程序里,此时getfa找到的两个fa是一样的,那么就标记这个fa。
#include <cstdio> const int maxn = 1000005; int n, u, v, fu, fv, fa[10005], tem;
char ch, ok[10005]; int getfa(int aa) {
return aa == fa[aa]? aa: fa[aa] = getfa(fa[aa]);
}
inline void readint(int & rt) {
while ((ch = getchar()) < 48);
rt = ch - 48;
while ((ch = getchar()) > 47) {
rt = rt * 10 + ch - 48;
}
} int main(void) {
//freopen("in.txt", "r", stdin);
readint(n);
for (int i = 1; i < 10001; ++i) {
fa[i] = i;
}
for (int i = 0; i < n; ++i) {
readint(u);
readint(v);
fu = getfa(u);
fv = getfa(v);
if (fu == fv) {
ok[fu] = 1;
}
else {
if (fu < fv) {
tem = fu;
fu = fv;
fv = tem;
}
fa[fv] = fu;
ok[fv] = 1;
}
}
int i;
for (i = 1; ok[i]; ++i);
printf("%d\n", i - 1);
return 0;
}
bzoj1854 [Scoi2010]游戏【构图 并查集】的更多相关文章
- BZOJ 1854: [Scoi2010]游戏 [连通分量 | 并查集 | 二分图匹配]
题意: 有$n \le 10^6$中物品,每种两个权值$\le 10^4$只能选一个,使得选出的所有权值从1递增,最大递增到多少 一开始想了一个奇怪的规定流量网络流+二分答案做法...然而我还不知道怎 ...
- bzoj1854 [Scoi2010]游戏 ([SCOI2010]连续攻击游戏)
bzoj1854 [Scoi2010]游戏 ([SCOI2010]连续攻击游戏) 据说正解是并查集???我不会 这不是一道匈♂牙利好题吗??? 一个装备的两个属性都向它连边,然后跑一遍匈♂牙利 注意: ...
- [BZOJ1854][Scoi2010]游戏(二分图匹配/并查集)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1854 分析:很裸的一道二分图匹配对吧,但是在hzwer的blog上看见神奇的并查集做法 ...
- P1640 [SCOI2010]连续攻击游戏【并查集】
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...
- 洛谷P1640 SCOI2010 连续攻击游戏 (并查集/匹配)
本题介绍两种做法: 1 并查集 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1000005; 4 int ...
- 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)
1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面 ...
- BZOJ1854: [Scoi2010]游戏 二分图
很早之前写的题了,发现没有更博,想了想,更一发出来. Orz ljss 这是冬令营上的例题...之后,我推出来了一种时间复杂度没有问题,空间复杂度没有问题的方法,额(⊙o⊙)…和给出的正解不同,但是能 ...
- [BZOJ1854][SCOI2010]游戏 二分图最大匹
1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 5316 Solved: 2128[Submit][Status] ...
- bzoj1854 [Scoi2010]游戏——匈牙利算法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1854 这题...据说可以用并查集做,但没有去看... 用二分图匹配的话,就把装备和它的两个属 ...
随机推荐
- Android开发之中的一个个简单的通讯录实现(源代码)
通讯录就是一个ListView.我们须要通过数据库和ContentProvider来活动通讯录的数据.当然,我们应该提供选中后编辑的功能. 非常easy的一个通讯略Demo,所以.直接上代码,须要的看 ...
- huawei校招测试题
三道题两小时. 第一题,圈住所有点的长方形,很简单略过. 第二题:奇偶排序. 奇偶排序 描述: 输入若干(不超过1000个)非负整数数字,请先取出为奇数的数字按从大到小排序,再取出偶数从小到大进行排序 ...
- a column-oriented DBMS
https://clickhouse.yandex/docs/en/introduction/what_is_clickhouse.html
- mvn 引入自定义jar 解决 mongo-spark 报错
[root@hadoop1 bin]# ./spark-submit ---bin-hadoop2./mycode/myprojectname/target/myprojectname-1.0-SNA ...
- java中创建对象的五种方法
用最简单的描述来区分new关键字和newInstance()方法的区别:newInstance: 弱类型.低效率.只能调用无参构造.new: 强类型.相对高效.能调用任何public构造. newIn ...
- JVM内存分配策略、各个代区、FullGC/MinorGC
主要讨论默认的Serial/Serial Old内存分配: 一.几种分配方案 1. 对象优先在Eden分配: 一般情况下,对象会在新生代的Eden区分配,Eden区没有足够空间时,虚拟机会 发起一次 ...
- POJ 2017 Speed Limit (直叙式的简单模拟 编程题目 动态属性很少,难度小)
Sp ...
- Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.st.mapper.UserMapper.userBaseMap
mybatis出现此异常,可能是因为 ***Mapper.xml 文件中存在重名对象,一不小心重复启动了mybatis的逆向工程. 以为会覆盖掉以前生成的,没想到是新生成的和之前生成的重复了 解决:把 ...
- WebStorm配置SVN
下载SVN客户端管理工具TortoiseSVN-1.8.5.25224-x64-svn-1.8.8,选择合适的Windows版本 配置项目目录,对应的VCS为Subversion 设置Subversi ...
- 「网络流24题」「LuoguP4015」 运输问题
Description W 公司有 m 个仓库和 n 个零售商店.第 i 个仓库有 ai 个单位的货物:第 j 个零售商店需要 bj 个单位的货物. 货物供需平衡,即 ∑ai=∑bj . 从第 i ...