随笔分类 - [C++]数据结构-并查集
摘要:题面 "Bzoj" "洛谷" 题解 考虑用并查集维护图的连通性,接着用线段树分治对每个修改进行分治。 具体来说,就是用一个时间轴表示图的状态,用线段树维护,对于一条边,我们判断如果他的存在时间正好在这个区间内,那就把它用并查集并起来。最后对于一个询问,直接用并查集找就好了。 但是因为有撤销操作,所以
阅读全文
摘要:题面 "Bzoj" "洛谷" 题解 最暴力的方法是直接判两个点之间的路径最小值是否$\geq k$,用$Dijkstra$可以做到该算法最快效率,但是空间复杂度始终是$O(n^2)$的,会$MLE$,其实仔细观察一下,会发现对于一个满足某个$k$的路径$dis$,它一定会满足$\forall k'\
阅读全文
摘要:题面 "Poj" 题解 这里采用并查集的补集。 $x$表示同类集合,$x+n$表示敌人集合,$x+n\times2$表示敌人的敌人集合。 如果当前给出的是一对同类关系,就判断$x$是否吃$y$或者$y$是否吃$x$(冲突)。 如果是真话,就将所有关系连在一起。 反之,如果给出的是一对$x$吃$y$关
阅读全文
摘要:题面 "Bzoj" "洛谷" 题解 考虑离线做法,逆序处理,一个一个星球的加入。用并查集维护一下连通性就好了。 具体来说,先将被消灭的星球储存下来,先将没有被消灭的星球用并查集并在一起,这样做可以路径压缩,然后再将被消灭的星球倒着一个一个加入,然后在$union$的时候,如果两个元素不在同一个集合中
阅读全文

浙公网安备 33010602011771号