摘要:
题面传送门 先来考虑两个字符串的最长公共子串怎么求。 考虑SAM有一个性质:源点到任意点的任意路径都是原串的一个子串。 这个性质就可以搞了。 首先对于第一个串建立AC自动机,然后让第二个串在第一个串上跑匹配。 这样就可以计算答案了。 但是对于多个串怎么办呢? 可以在每个节点上都对于每个串计算答案并取 阅读全文
摘要:
题面传送门 统计后缀间的LCP自然想到要用SAM做。 那么就是求两点间lca的深度。 容易发现枚举$lca$然后统计子树间信息即可。 但是这个东西是每次$O(n)$dfs一遍算贡献。如果卡卡能卡到$O(nm)$ 对于这个一个套路就是建立虚树。 时间复杂度$O(nlogn+mlogn)$ code: 阅读全文
该文被密码保护。 阅读全文
该文被密码保护。 阅读全文
摘要:
题面传送门 这道题给了没有修改的部分分,考虑怎么拿到这些分数。 然后发现我们可以枚举每个节点然后算贡献。 可以发现如果两个不同子树的access就会产生一个贡献。 然而如果一个子树过大那么就没有那么多贡献。 从而我们可以一次树形dp解决掉。 然而这个东西带修就不是很好做了。 可以发现这个东西和树链剖 阅读全文
摘要:
题面传送门 一开始傻子一样的写了个线段树分治+LCT常数巨大只得了$50$分和没有按秩合并的并查集一样分数。 然后我们发现这个东西删掉的边数很少,所以如果每一次都把这个东西重新初始化一边很不划算。 然后可以发现有很多边在一大段区间内都是存在的。 所以就可以上线段树分治了,连通性用并查集维护。 这个是 阅读全文