随笔分类 - 数据结构 - 并查集
摘要:题目大意:维护 N 个点的无向图,支持动态加边和删边,回答两点的连通性。 题解:线段树分治 + 可撤销并查集 询问可以离线,这是线段树分治的基础。 建立在操作时间轴上的线段树称为线段树分治算法。 本题中线段树维护的是当前时间段中出现的边的集合。分析可知,对于一条边来说,至多出现在线段树上 $O(lo
阅读全文
摘要:题目大意:给定 N 个点的图,点有点权,初始有一些无向边,现在有 Q 个询问,每个询问支持动态增加一条无向边连接两个不连通的点和查询第 X 个点所在的联通块中权值第 K 大的是哪个点。 题解:学会了平衡树的启发式合并。 以每个点建立一棵平衡树,需要加边时则合并两个点对应的平衡树,启发式的思想在于合并
阅读全文
摘要:题目大意:给定一个有 N 个点,N 条边且每个点的出度均为 1 的有向图,求该有向图的一个最小环。 题解:由于每个点的出度均为 1,可知可能的情况只有以下几种:一个环或多个环,一个环+一条链。因此,可以采用 Tarjan 缩点,求出每个强连通分量,更新答案贡献。另外,学到了一种并查集做法,由于每条边
阅读全文
摘要:题目大意:给定一张无向图,要求如果 A 与 B 之间有边,B 与 C 之间有边,那么 A 与 C 之间也需要有边。问这张图是否满足要求。 题解:根据以上性质,即:A 与 B 有关系,B 与 C 有关系,那么 A 和 C 也要有关系,因此可以采用并查集加以维护,维护关系的同时顺便维护各个联通块的大小,
阅读全文
摘要:代码如下 cpp include using namespace std; const int maxv=2e5+10; const int maxe=5e5+10; inline int read(){ int x=0,f=1;char ch; do{ch=getchar();if(ch==' '
阅读全文
摘要:题目大意:维护 N 个人和 M 个关系,对每个人来说符合:我朋友的朋友也是我的朋友,我敌人的敌人也是我的朋友,求最多有多少个朋友构成的联通块。 题目大意:维护关系显然要用到并查集,这里是维护了两种关系,即:朋友和敌人,应该有两种做法,首先是维护带权并查集,可用 0 表示两人为朋友,1 表示两人为敌人
阅读全文
摘要:题目大意:给定 N 项任务,每项任务有一个截至完成时间,若在截止时间之后完成要罚款 $w_i$ 元,最初有 M 元,怎样完成能够留下最多得钱。 题解:按照罚款从多到少贪心,在查找能够最晚完成一项任务的时间时,可以采用并查集优化,即:建立一个时间上的并查集,每次在某个时间完成一项任务时,合并当前时间和
阅读全文

浙公网安备 33010602011771号