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

猜你喜欢

转载自www.cnblogs.com/Lrefrain/p/12395980.html