省选模拟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操作,查找排名确定大小关系。
一个处理相等的方法是使用并查集维护。