ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2019-9-12做题记录

2019-09-13 11:55:19  阅读:221  来源: 互联网

标签:重构 12 log Kruskal 2019 做题 我们 主席 贪心


1、Peaks加强版(Kruskal重构树,主席树)

$Kruskal$重构树的模板题。

$Kruskal$重构树:在合并两个联通块的时候,建一个新点,当原来两个代表元的父亲,作为新联通块的代表元。

查询的时候在叶子上跳到能到达的最远祖先,在叶子的$dfs$序里面查$k$大就行了。

2、【LOJ#6073】距离(主席树)

树链剖分$+$可持久化的套路。

3、【BZOJ4771】七彩树(主席树)

好听的名字和好学的题目。

按照虚树的思想,我们把同一颜色的点拎出来,按$dfs$序排序,然后在每个点$+1$,在相邻点$LCA$处$-1$,这样任意时候我们只要查子树和,就知道了子树里的颜色数。

如果不离线,我们直接按深度优先搜索序插入线段树,维护子树和。把线段树变成主席树,就可以在线了。

4、【BZOJ5304】[HAOI2018]字串覆盖(后缀数组,主席树,倍增)

又是蛤省省选神仙题。

很显然贪心是从左到右能选就选。

对$sa$数组建主席树,值域是它原来的位置。

询问的时候先$rmq+$二分确定区间,找到第一个合法的,再在主席树上反复找后继,这样是$O(n/|P|*logn)$的,当$|P|$很小的时候是不行的。

当$P\le 50$,我们可以预处理答案。直接对每一个$|P|$构建一棵树,每一个位置向它的前驱(一个位置$x$,使得向后$|P|$位后形成的字符串和当前位置向后|P|位形成的字符串相等且不交)连父边,我们在主席树上找到第一个合法的位置,然后找一条向下的长链,预处理即可。

5、【BZOJ4408】[FJOI2016]神秘数(主席树维护贪心)

如果只有一次询问,我们该怎么做?

我们先排个序,如果没有$1$,$1$就是神秘数,如果有$1$,我们应该怀疑$2$是不是神秘数,如果下一个不是$2$,那就不是了。

但是可以发现,这样是假的,因为还可以再来一个$1$,然后两个$1$拼成一个$2$。

这样的话,我们每次只要把小于等于$1$的找到,然后看看下一个是不是$sum+1$,如果不是,就不是了,如果是的话,说明$[1..2sum+1]$都是可以的,直接把$sum$变成$2sum+1$。这个过程是一个$log$的

多次询问的话,用主席树找前驱代替排序,再加一个$log$,总共就是两个$log$的。

这类数据结构维护贪心的问题第一要从最简单的贪心入手,第二再从数据结构入手。就比如说,这道题我一开始想到了用主席树来维护分治信息,是不行的。

6、【BZOJ4242】水壶(克鲁斯卡尔重构树,BFS)

目测是$IOI$题啊。

首先很显然,最小瓶颈生成树上查两点上最值。

$dijkstra$染色就可以了,具体见[JXOI2018]旅行者。

7、【BZOJ3712】Fiolki(并查集重构树)

建出$Krustra$重构树,然后我们知道,深度大的优先反应,同深度的优先级高的先反应。

按照这个双关键字排序,每次维护剩余的量,然后依次做就可以了。

8、

 

标签:重构,12,log,Kruskal,2019,做题,我们,主席,贪心
来源: https://www.cnblogs.com/shxnb666/p/11516518.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有