题目记录(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{lcm}(S) = \prod_{T \subseteq S} R_{\text{gcd}(T)}^{(-1)^{|T|-1}} \]

这个 \(\text{gcd}\) 不好处理,所以考虑把它转化为有关于因数的,则考虑定义 \(R_n = \prod_{i \mid n} F_i\),则我们有:

\[= \prod_{T \subseteq S} (\prod_{i \mid \text{gcd}(T)} F_i)^{(-1)^{|T|-1}} \]

则考虑把 \(i\) 放到外面枚举,可得:

\[= \prod_{d} F_d \times [\sum_{u \in S} [d \mid u] \neq 0] \]

然后只需要用反演求出 \(F_d\) 即可。

T3. P14455

简单构造题,场掉了。

假如我们设 \(1\) 为这棵树的根节点,那么 \(w_{1,i} \oplus w_{1,j} \oplus w_{i,j}\) 就可以确定 \(i,j\)\(\text{lca}\) 的编号。

然后考虑对于每一个点都维护其子树集合,然后按照这个集合的大小从小到大去考虑节点即可。具体的,如果遇到非叶子节点 \(u\),考虑去枚举他的子树中的所有点然后看有那些节点没有找到父亲,这些点的父亲就一定是 \(u\)

posted @ 2025-12-07 15:52  sqrtqwq  阅读(5)  评论(0)    收藏  举报