2022省选后日常集训

5.14省选组 总结(AHOI2022)

T1

题目所说的过程就是把两个环合起来。
那么把大小相同的环扔到一起算,那不同的环个数就只有 \(O(\sqrt n)\) 个,直接枚举合并哪两个环就行,复杂度是 \(O(n)\) 的。
维护 lcm 就是维护每个质数的最高指数,由于需要删去某个环的贡献,记录一下指数的次大值即可。

T2

钥匙的个数只有 \(5\) 个非常关键,利用这个性质可以建虚树做,还没仔细研究。

T3

乍一看以为跟前两周的 AGC 很像,后来发现完全不一样(

T4

啊啊啊啊啊啊啊啊啊暴力分有60pts呜呜呜呜呜呜
特性B也搞定的话就能72了……

6.6省选组 总结

T1

套了个博弈壳子而已,就是求 \(1\) ~ \(n\) 内质因数为 \(i=1\) ~ \(30\) 的数有多少个。

直接Min25筛。

T2

十万的数据范围,根号算法直接考虑莫队,发现直接莫队的复杂度是不平均的,那么平衡一下复杂度,也即按 \(\sqrt{\sum \frac n i}\) 分块,此时每个块的大小不一样,但是每个块内的操作复杂度是平衡的。

T3

每层设生成函数,显然有 \(F_R(x)=\frac{1}{1-A_R(x)F_{R+1}(x)}\) ,直接维护很慢,而且无法优化,但是可以将 \(F_R(x)\) 写成 \(\frac {B_R(x)}{C_R(x)}\) 的形式,每次转移都是一个简单的线性变换,分治维护矩阵乘法(类似于分治FFT)。

6.7省选组 总结

T1

\(a | b\)\(a \oplus b\) 都用 \(a \& b\)\(a+b\) 表示,然后用 FWT ,\(a+b\) 的部分放在系数里, \(a \& b\) 的部分放在指数上。

T2

\(v_i\) 为点 \(i\) 连出的所有边的异或和。
根据这是一棵树(不存在环)可以知道最终目的是使 \(v_i\) 全部变为 \(0\)
每次操作可以将其中两个(即路径的两个端点)同时异或 \(k\)

易证几个结论:

  1. 每个操作至少会删去一个点,合法且不劣。
  2. 有两个相同的点一定用一次操作删去。

值域只有 \(15\) 那么就能直接状压了。

T3

直接维护 mex 不好做,考虑维护其补集。

非常套路地使用线段树维护,每个节点都维护一个完整的补集显然是不行的,时间直接爆掉。
那么尝试让补集分散到每个点中,使同一个元素不在有祖先关系的点中出现,这样最大的集合个数就是 \(O(n \log n)\) 的。

维护的话类似标记永久化,每次经过该点时要将此处集合的最小值计入贡献,但是每次在一个集合中删数后要往两个儿子 push ,用维护区间的形式显然是好做一些的。

为了保证时间复杂度额外维护一下当前点没有但后代有的值,用 map 就好。

posted @ 2022-06-08 09:34  Kelvin2005  阅读(54)  评论(0)    收藏  举报