数据结构-启发式合并
Maxwei_wzj
AFO
展开
-
【BZOJ3123】森林(SDOI2013)-树上主席树+启发式合并
测试地址:森林 做法:本题需要用到树上主席树+启发式合并。 如果树的形态固定,那么求路径第kkk大,我们想到用主席树。求区间的第kkk大我们是在序列上建主席树,每棵线段树代表一个前缀和,那么求路径的第kkk大,类比序列的前缀和与树上前缀和的转化,我们可以在树上建主席树,每棵线段树代表从一个点到根路径上的信息,这样我们就可以通过x+y−lca(x,y)−fa(lca(x,y))x+y−lca(x...原创 2018-05-30 17:11:07 · 257 阅读 · 0 评论 -
【BZOJ2733】永无乡(HNOI2012)-平衡树启发式合并
测试地址:永无乡 做法:本题需要用到平衡树启发式合并。 题目要维护每个连通块的第kkk大,并且要支持合并。维护第kkk大我们知道可以用平衡树解决,但是平衡树的合并我们好像除了暴力就没有想法了。怎么样比较快地合并两棵平衡树?想法上非常简单,我们只需要暴力把点数比较小的那棵平衡树上的点一一插入到另一棵平衡树上。为什么这样就更优了呢?因为每次合并,新平衡树的大小必然是原小平衡树的两倍以上,那么每个元...原创 2018-03-11 18:15:37 · 321 阅读 · 0 评论 -
【BZOJ2212】Tree Rotations(POI2011)-平衡树启发式合并
测试地址:Tree Rotations 做法:本题需要用到平衡树启发式合并。 对于叶子节点,最优答案显然是000。然后对于每棵子树,我们发现由转换它的左右子树所多出的逆序对数,仅和两边都有什么数字有关,而不和两边的数字顺序有关,所以我们对于每个叶子节点存储一棵平衡树,然后在每个节点合并左右子树的平衡树,在合并的同时,算出新增的逆序对数,然后判断要不要转换子树,选择最小的答案累加即可。 以下是...原创 2018-03-11 21:13:21 · 283 阅读 · 0 评论 -
【BZOJ4537】最小公倍数(HNOI2016)-分块+并查集启发式合并
测试地址:最小公倍数 做法:本题需要用到分块+并查集启发式合并。 脱去题目各种疑似数论的包装之后,我们发现实际上题目让你求的是:存不存在一条路径,使得路径上最大的aaa和最大的bbb分别为询问的AAA和BBB。显然如果只有一个询问的话,我们就把a≤Aa≤Aa\le A并且b≤Bb≤Bb\le B的边连起来,再用并查集维护联通块内最大的aaa和最大的bbb,如果询问的两个点连通并且最大的aaa和...原创 2018-05-02 17:55:43 · 259 阅读 · 0 评论 -
【BZOJ1483】梦幻布丁(HNOI2009)-链表+启发式合并
测试地址:梦幻布丁 做法: 本题需要用到链表+启发式合并。 首先,注意到颜色的段数等于,相邻的颜色不同的元素对数+1+1+1,而一对元素一旦颜色相同就不可能再变成不同,因此我们在改变颜色的时候,只要找到这个颜色的元素周围有没有修改后就变成颜色相同的元素即可。 我们想到用链表来连接同颜色的那些点,但如果进行暴力修改的话,时间复杂度最坏为O(n2)O(n^2)O(n2),怎么办呢?注意到一种颜色变成另...原创 2018-10-22 08:33:18 · 222 阅读 · 0 评论