可以事先打表观察每个数的约数个数,观察到如果进行替换,若干次后这个数便会被替换成1。 所以我们可以直接暴力的进行区间修改,若这个数已经到达1或2,则以后就不再修改,用并查集和树状数组进行维护。 这个方法用了 "P2391 白雪皑皑" 的思想处理,用并查集标记该点已经不再用替换。 code: ...
分类:
其他好文 时间:
2020-01-23 00:20:17
阅读次数:
113
用计算器算一算,就可以发现$10^{18}$的数,被开方$6$次后就变为了$1$。 所以我们可以直接暴力的进行区间修改,若这个数已经到达$1$,则以后就不再修改(因为$1$开方后还是$1$),用并查集和树状数组进行维护。 这个方法用了 "P2391 白雪皑皑" 的思想处理,用并查集标记该点已经不再用 ...
分类:
其他好文 时间:
2020-01-22 23:56:25
阅读次数:
121
合并不采用路径压缩,保证每次合并只修改一个节点的父亲,使当前版本与上一版本共用的节点尽可能的多 为防止并查集退化成链,采取按秩合并 $code$: ...
分类:
其他好文 时间:
2020-01-22 22:06:15
阅读次数:
80
左偏树可以用来维护可并堆(并查集加堆) 可以用并查集一样的路径压缩来优化复杂度 路径压缩后$fa$记录的就不为其原树中的父亲,而是用来表示堆与堆之间的关系 $dis:$表示该节点到它子树内最近的叶子节点的距离 节点的左儿子的距离不小于右儿子的距离,每次合并时,将一棵树合并到另一棵树的右子树,来保证复 ...
分类:
其他好文 时间:
2020-01-22 21:47:25
阅读次数:
68
并查集的神奇用法:[JSOI2008]最大数 Description 现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。 限制:LL不超过当前数列的长度。(L > 0)(L>0) 2、 插入操作。 语法:A ...
分类:
Web程序 时间:
2020-01-22 19:56:49
阅读次数:
99
Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. To minimize ...
分类:
其他好文 时间:
2020-01-21 23:30:26
阅读次数:
99
G - 食物链 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是"1 X Y",表示X和Y是同类 ...
分类:
其他好文 时间:
2020-01-21 23:26:27
阅读次数:
68
并查集是一种树型的数据结构,用于处理一些不相交集(Disjoint Sets)的合并及查询问题。不相交集,顾名思义,就是交集为空集的一些集合。比如集合 {1,3,5} 和集合 {2,4,6} 就是 不相交集。 {2,3,5} 和 {1,3,5} 就不是,因为他们的交集不是空集。该数据结构由Berna ...
分类:
其他好文 时间:
2020-01-20 22:55:55
阅读次数:
68
void init() { for(int i = 1; i <= N; i++) f[i] = i; } int find(int k) { return f[k] == k? k : f[k] = find(f[k]); } int union(int a, int b) { f[find(b) ...
分类:
其他好文 时间:
2020-01-19 23:43:08
阅读次数:
92
左偏树。 并查集维护每个元素所在左偏树的根。每次取出堆顶除二再 回去。然后 两个点所在的堆。 2020.01.18 ...
分类:
其他好文 时间:
2020-01-19 19:22:37
阅读次数:
61