
并查集
Rem_Inory
这个作者很懒,什么都没留下…
展开
-
【题解】vijos P1250 最勇敢的机器人(并查集 背包)
这道题其实是一道分组背包问题,因为将某两件物品放在一起会爆炸,并且爆炸具有传递性,所以我们可以用并查集来合并这些会爆炸的物品的编号,构成许多组,然后就可以用分组背包模板做了。fw、fp二维数组存其组号和对应的第几个箱子的大小 价值,0表示这一组里共有多少箱子。#include<cstdio>#include<iostream>using namespace std...原创 2018-07-14 21:01:16 · 223 阅读 · 0 评论 -
【题解】洛谷P1197 星球大战(并查集 连通块)
对于这道题目,我们不难想到要用并查集来解决,但由于数据范围较大,而且摧毁星球的过程很难在已经建好的并查集内构建,所以我们不妨逆向思考,将摧毁变为重建星球。读入数据后,我们采用链式邻接表构建两个点之间的边,并初始化所有即将被摧毁的星球为true。初始化并查集。由于单个点也可以作为连通块,所以我们初始化num为n-k,记录在要摧毁的所有星球都被摧毁后连通块的数量。枚举边,如果边的两个端点都没被摧毁...原创 2018-07-21 20:22:07 · 406 阅读 · 0 评论 -
【题解】洛谷P1196 银河英雄传说 P2024 食物链
https://juruo-oier.blog.luogu.org/solution-p1196https://blog.youkuaiyun.com/qq_24451605/article/details/46876121orz大佬带权并查集好难啊。。。转载 2018-07-21 22:38:49 · 201 阅读 · 0 评论 -
【题解】洛谷P1525 关押罪犯(并查集)
俗话说得好,敌人之敌亦吾之友,这道题就利用这个思路来解决。首先开结构体存储每一条关系,并将结构体按照仇恨值由大到小排序。对循环读入的每一组关系来说,如果一个人还没有仇人,就把他的仇人设为那个人;如果这个人有仇人了,因为排序是从大到小的,所以我们将他们的仇人关在一起。对于另一个人也是试用的。如果读入的某组数据里两个人在同一个并查集内,这个时候直接输出当前的仇恨值就好了(从大到小排的序嘛)。对于并...原创 2018-07-22 08:38:43 · 276 阅读 · 0 评论 -
【题解】 洛谷P2024 食物链(并查集)
这次再发一遍是因为由关押罪犯get到了一种新的做法。将并查集开到n*3,对于某个动物a来说,a+n代表它吃的动物,a+2n代表吃它的动物,这样我们就可以进行普通的并查集操作来得到答案了。注意判断前后话语是否矛盾时应当分情况,如果是b,c同类,那么如果b和c吃的动物或者c和b吃的动物在同一个集合里,那就是假话;如果b吃c,那么如果b,c是同类或者b与c吃的动物在同一个集合里,就是假话。对于真话来说,...原创 2018-07-22 09:52:56 · 193 阅读 · 0 评论 -
【题解】 RQNOJ PID397 约会计划(模拟 并查集)
估计问题大部分集中在如何存储字符串,求并查集的过程。我们只需要手写一个get函数,遍历所有的字符串,找到某个字符串对应的序号存下来,然后求普通的并查集就行了,在合并和找父亲时对其序号进行操作。#include<cstdio>#include<iostream>using namespace std;const int maxn=2030;int fa[maxn...原创 2018-07-22 10:46:41 · 149 阅读 · 0 评论 -
【题解】洛谷 P2294 [HNOI2005] 狡猾的商人(带权并查集)
实际上运用带权并查集的模板可以很好地解决这个问题。。注意并查集应从0-n初始化,我们把第i月和第0个月的差值设为num[i],并且初始化为0。find函数进行并查集寻找父亲的操作,只不过在这个过程中,要更新num[x]。若二者有父亲结点不同,就更新父亲结点,并更新num数组(例如我是把f2接到f1上,假设f2比f1大z,那么可以得到更新后num[y]+num[f2]=num[x]+z,移项可表...原创 2018-07-22 14:18:06 · 331 阅读 · 0 评论 -
【题解】洛谷P3958 奶酪(并查集 搜索)
想了半天写了一个搜索,不过里面用到了并查集的思想。。。结果很显然我TLE了6个点。看了题解之后发现自己傻了。。所以就把搜索去掉,单用并查集解决不就完事儿了qaq#include<cstdio>#include<iostream>#include<algorithm>#include<cstdlib>#include<cstri...原创 2018-08-25 19:09:52 · 310 阅读 · 0 评论 -
【题解】洛谷P2323 公路修建问题(生成树)
概括一下 就是最小生成树问题对于连接两个点的一条边都可以选择两个权值(一级 二级),一级权值>=二级,要求必须选至少k条一级公路(因为一级权值始终比二级全职大,所以我们就选k条一级公路),求这样构建出来的最小生成树最长的一条大小与选择第几条公路和级别。这里我们需要写三个排序函数,第一个按照一级公路权值由小到大排序,选出k条公路。第二个按照二级公路权值由小到大排序,选出n-1-k条公路,记...原创 2018-10-08 14:52:00 · 394 阅读 · 0 评论