AHOI2022

P8338 [AHOI2022] 排列

  • 首先缩环,每个环有个数量, 对于有个点交换就是两个环合起来,然后求 lcm

  • 这里需要知道一个很简单但是很重要的结论:对于 \(\sum a_i=n\) ,不同的 \(a_i\) 只会有 \(\sqrt n\) 的数量级

  • 所以先去重一下,然后暴力枚举,那么就是 \(O(n)\) 的了

  • 那么现在就是要维护一个集合的 lcm ,支持删除添加

  • 考虑质因数分解,那么就是对于每个质数的幂次维护最大

  • 质因数的个数只有 \(O(\log )\) 的,虽然我也不会证

  • 那么我们需要支持删除加入快速求最大值,因为只会删 2 个,所以考虑维护最大的 3 个幂次就可以了

P8339 [AHOI2022] 钥匙

  • 考虑一种不重不漏的贡献方式,假设钥匙是 +1 ,宝箱是 -1 ,对于 +1+1-1-1,我们使 \((2,3)\)\((1,4)\) 为两组贡献,可以发现这样子做后的贡献可以做到不重不漏

  • 考虑对于每种颜色建立虚树,对于每个钥匙节点在相应的虚树上 dfs ,\(dp_y\) 表示到达这个节点时还剩的钥匙,那么如果还剩一把,那么自己和这个节点就可以算贡献了

  • 也就是对应 \(x\to y\) ,如果路径 \(u\to v\) 覆盖 \(x\to y\) ,那么贡献加一

  • 可以发现这样算的贡献确实是不重不漏

  • 对于路径覆盖问题,可以转换变成 dfn 在某个区间

  • 那么每个贡献可以看成一些矩形,每种路径看成二维平面的一个点,那么就是询问一个点能被多少个矩形覆盖了

  • 这个就可以将二维平面的信息全部离线下来,然后做

posted @ 2022-06-04 11:29  Kzos_017  阅读(27)  评论(0编辑  收藏  举报