并查集
文章平均质量分 54
并查集
TMJYH09
这个作者很懒,什么都没留下…
展开
-
[USACO16OPEN]Closing the Farm 题解
本题有两道一模一样的题目,改个数据范围即可 AC。 题目1 | 题目2 题意简述 给定一张无向图,每次删去一个点,问每次操作后图是否联通。 分析 判断图是否联通可以想到使用并查集来维护。但是并查集很难实现删除操作,那如何处理呢? 并查集的核心是“并”和“查”,既然题目要求每次删去一个点,那不如反过来想,倒序处理,把删点变成加点,这样处理起来就非常方便快捷了。 代码实现 #include <bits/stdc++.h> using namespace std; int n,m; struct e原创 2022-01-17 17:21:58 · 246 阅读 · 0 评论 -
P1197 [JSOI2008]星球大战 题解
题目传送门 题意简述 给定一张无向图,每次删去一个节点,问每次操作后的连通块个数。 分析 m≤2×105,n≤2⋅mm\le2\times10^5,n\le2\cdot mm≤2×105,n≤2⋅m,如果每次暴力删点再 bfs,必定超时。 还记得上次提到的 [USACO16OPEN]Closing the Farm 吗?这两题非常非常相似,我们可以将删点转换为加点,倒序处理,再求连通块即可。 算法步骤如下: 建图,读入每次删去的节点。 先预处理出起始图(即把幸免遇难的节点做并查集),统计连通块数。 倒序处原创 2022-01-24 23:56:48 · 168 阅读 · 0 评论 -
P1525 [NOIP2010 提高组] 关押罪犯 题解 | 种类并查集
前言 并查集,想必大家并不陌生,她可以方便快捷地合并、查询两个集合。 例题:P1551 亲戚。 不过我们今天的重点不是普通并查集太简单了(雾,而是并查集的一种变体,种类并查集。 Part1. 种类并查集 种类并查集一般是把元素分成确定的集合数。 例如 P1525 [NOIP2010 提高组] 关押罪犯,把若干个罪犯分成 222 个集合,而且给关系很特别,给的是 222 个数不在一个集合。此时,种类并查集就派上用场了。 Part2. 实现 先看代码: #include <bits/stdc++.h>原创 2022-01-24 19:05:25 · 657 阅读 · 0 评论 -
P1196 [NOI2002] 银河英雄传说 题解
题目传送门 分析 可以看到,题目中涉及到很多合并和查询操作,所以我们可以用并查集来维护每列的信息。 不过这题需要而外维护两个数组 disidis_idisi 和 sizisiz_isizi,分别表示距离序列头部的距离和以 iii 做头的序列长度。 合并时需要更新 sizsizsiz 和 disdisdis。 查询 iii 和 jjj 之间的飞船个数就是 ∣disi−disj∣−1|dis_i-dis_j|-1∣disi−disj∣−1。 代码 #include <bits/stdc++.h&g原创 2022-01-21 19:51:20 · 268 阅读 · 0 评论