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