题目记录(Before 省选 ver.)
T1. P6891
首先考虑有没有 \(\mathrm O(n^2)\) 的做法。此时考虑定义 \(dp_{i,j,A/B}\) 表示目前选了 \(i\) 个数,其中有 \(j\) 个是 \(A\) 数组里的,最后一个数是 \(A\) 还是 \(B\) 中的。
然后此时考虑定义 \(dp_{i,A/B,0/1}\) 表示当前选择了 \(i\) 个数,其中最后一个选的是 \(A\) 还是 \(B\) 数组里的,\(A\) 最大/最小有多少个。
那么此时的转移就很简单了,可以做到 \(\mathrm O(n)\) 转移。构造答案可以直接倒着构造。
T2. AT_arc202_c
首先有 \(R_{\gcd(x,y)} = \gcd(R_x,R_y)\)。
注意到 \(\text{gcd}\) 和 \(\text{lcm}\) 的本质其实是对于所有因数的幂次取 \(\min\) 或者取 \(\max\)。
发现题目要求的形式是求一个集合的 \(\text{lcm}\),然后根据上面的观察,考虑对于这个东西做一个 \(\min-\max\) 容斥得:
这个 \(\text{gcd}\) 不好处理,所以考虑把它转化为有关于因数的,则考虑定义 \(R_n = \prod_{i \mid n} F_i\),则我们有:
则考虑把 \(i\) 放到外面枚举,可得:
然后只需要用反演求出 \(F_d\) 即可。
T3. P14455
简单构造题,场掉了。
假如我们设 \(1\) 为这棵树的根节点,那么 \(w_{1,i} \oplus w_{1,j} \oplus w_{i,j}\) 就可以确定 \(i,j\) 的 \(\text{lca}\) 的编号。
然后考虑对于每一个点都维护其子树集合,然后按照这个集合的大小从小到大去考虑节点即可。具体的,如果遇到非叶子节点 \(u\),考虑去枚举他的子树中的所有点然后看有那些节点没有找到父亲,这些点的父亲就一定是 \(u\)。

浙公网安备 33010602011771号