A. 签到题
把每个点向它右侧比他大的第一个点之间连边,如果没有那么向 (root) 连边。
那么可以构成一棵树。
特判一些情况之后,可以认为问题就是:
1.给某节点和它的所有儿子节点权值加上一个值。
2.询问一条路径的权值和。
首先考虑如果只询问单点的维护方法,其实就是打一个标记表示给整个儿子集合都加上了若干权值。
每次只要统计单点的修改加上父亲标记即可。
所以把这个式子拆开,分别用线段树树剖维护就好了。
B. 蓝超巨星
对于左移的问题,可以枚举 (S) 这个串与 (T) 匹配的起始位置。
然后通过哈希判断字符相等的集合是否相等,哈希的方式自然还是 (sum limits_{i=1}^n (i-lst_{s_i})*p^i)。
在哈希判断成立的条件下,只需要判断 (26) 个字符是否对位相等。
预处理出每个置换环的大小,每个字符置换到另一个字符需要用的最短时间。
然后发现对于每个字符,都要满足一个同余方程,其中模数不大于 (26)。
对于左移的限制,还要满足一个同余方程,模数为 (n)。
对于同余方程的合并,有一个简单的 (O(min{模数})) 的做法,不断给一个变量加上较大的那个模数即可。
所以这题就可以 (O(n26^2)) 的做完了,如果对于每个环都只做一遍合并,复杂度可以做到 (O(n26))。
C. 秘密行动
容易发现每个质因子是独立的。
所以对于每个点的每个质因子可以看做选或不选两种事件。
二者分别有一个代价,二者不能共存。
对于 (m) 条边,其实就对应着恰好一个选。
这个问题可以用最小割解决,然后我刚开始的建图是这样的:
把每个点的每个质因子拆成两个点,分别表示选和不选,中间连上 (infty) 边。
对于 (m) 条边,将 (a) 选向 (b) 不选连边,(b) 选向 (a) 不选连边。
然而这个做法是伪掉的,因为存在情况同时割掉了某个点选和不选两条边。
所以题解的建图是这样的:把这两个点合并成一个点,然后直接把边连起来。