省选模拟11 题解

A. 组合数问题

还没想明白如何做,待补。

 

B. recollection

因为原图为trie树,树上两个点的lcp长度等于两个点的lca深度。

考虑通过广义sam来维护两个点的lcs。

树上同时对应着一个$endpos$,树上两个点对应的$endpos$对应的广义sam上节点在后缀树的lca的$len$即为两个点的lcs长度。

所以对于原树上每个点,我们只关注它的子树在后缀树上能形成的$len$最大的lca。

树上$n$个点形成的lca集合,实际上等于dfs序上相邻的两点形成的lca集合。

所以用线段树合并/启发式合并set都可以解决这个问题。

 

C. comparison

题中给出的比较方式为一种偏序,也就是说该比较方式是具有传递性的。

由于只涉及到在父亲位置加点的操作,可以发现新加点不会影响原集合的排名。

所以可以通过中序遍历为排名遍历的平衡树,查找排名确定大小关系。

考虑新插入一个点,按照往常的思路在平衡树上二分是不可行的。

因为我们确定排名的方式是比较儿子,而儿子也在平衡树上,较难处理。

另一个思路是直接二分插入位置,将第$k$大的节点抽离出来。

通过splay标号与原序列标号的一致,可以直接对要比较的子节点执行splay操作,查找排名确定大小关系。

一个处理相等的方法是使用并查集维护。

posted @ 2020-01-29 20:51  skyh  阅读(145)  评论(0编辑  收藏  举报