「考试」省选35

T1
把题目中的限制转化为:
(x)在儿子的子树中并且(y)不在儿子的子树中。
(y)在儿子的子树中并且(x)不在儿子的子树中。
线段树节点维护(dfs)序在节点区间中的所有的(x)或者(y)
当然,红蓝各开两个线段树树。
按照(dfs)序区间查询然后暴力扫描(vector)就可以知道要删除哪些点了。
代码很难写。
时空复杂度均为(O(nlogn))

T2
括号序列匹配问题。
可以拆成两条路径然后再(lca)统计。
这样就可以简单的用点分治了。
在每一个分治重心维护两个数组。

[fr[i][j],se[i][j]$$分别表示可以分成$j$个的合法序列,前面有$i$个左/右括号无法匹配的方案数。 然后这个东西的统计部分直接$dfs$即可。 答案统计就用$FFT$搞就行了。 复杂度是$O(nlog^2 n)$。 T3 80分暴力可以用寿司晚宴的做法。 分开考虑小于和大于 $sqrt{n}$ 的情况。 用大于 $sqrt{n}$ 的作为初值,小于的靠$dp$来实现。 因为$n=800$,所以可以状压这个状态,只有2^10种状态。 随便写都能过的复杂度。 不知道哪里来的结论。 $S$中的点至多有两个不同质因子。 而且这些质因子一个小于$sqrt{n}$ 一个大于 $sqrt{n}$ 这样先把每个质因子的贡献加上。 然后跑最大费用可行流。 看看有没有某两个质因子的贡献是大于两个分开的贡献。 边数很少,所以跑得很快。 复杂度未知。]

原文地址:https://www.cnblogs.com/Lrefrain/p/12395980.html