「考试」省选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}$ 这样先把每个质因子的贡献加上。 然后跑最大费用可行流。 看看有没有某两个质因子的贡献是大于两个分开的贡献。 边数很少,所以跑得很快。 复杂度未知。\]

posted @ 2020-03-02 15:45  Lrefrain  阅读(104)  评论(0编辑  收藏  举报