AGC003D Anticube

神仙题。

由于时间限制 \(5\text s\),我们可以整点怪的,比如根号分解质因子。

但是直接分解是 \(O(n\sqrt w)\) 的,值域为 \(w\)\(10^{10}\),肯定会炸。

毛估估一下,如果需要分解质因数,大概只能分解到 \(O(\sqrt[3]{w})\) 的质数。

我们把小于 \(\sqrt[3] w\) 的质数记为 \(p_1,p_2,...,p_m\),显然 \(s_i\) 能够表示为 \(\prod p_k^{q_k}\times t\) 的形式。那么 \(t\) 不可能有次数大于等于 \(3 \) 的质因子。

由于要取出尽量多的数,考虑建立映射,记录形如 \(a_i=\prod p_k^{q_k\ \text{mod}\ 3}\times t\) 的数的个数。和 \(a_i\) 能组成立方数的 \(b_i\) 就一定形如 \(b_i=\prod p_k^{-q_k\ \text{mod}\ 3}\times t'\),其中 \(t\times t'\) 为完全立方数。

假如我们知道 \(t'\) 的值,将所有 \(a_i\) 扔进 map 里,向对应的 \(b_i\) 连双向边,两边点权均为出现次数,答案就是带权最大独立集。

我们发现每个 \(a_i\)\(b_i\)一一对应的,这个图其实是个二分图,每个连通块里面只有一条边,贪心取两边权值较大的即可。现在的问题变成了根据 \(t\) 如何求 \(t'\)

由于 \(t\) 的质因子全部大于 \(\sqrt[3] w\),那么显然 \(t\) 至多包含 \(2\) 个质因子,那么 \(t\) 就只有三种表示:\(t=p/pq/p^2\)\(p,q\) 均为质数。

我们将根号的精神 贯 彻 到 底,考虑根号分治:

  1. \(t\le \sqrt w(t\neq 1)\)

显然 \(t\) 只能表示成 \(p\) 的形式,所以 \(t'=p^2\)

  1. \(t>\sqrt w\)
  • \(t=pq\),则 \(t'=p^2q^2\),超过了 \(w\),不用管。
  • \(t=p\),则 \(t'=p^2\),也超过了 \(w\),也不用管。
  • \(t=p^2\),则 \(t'=p\),符合条件。

于是对于这种情况,判断 \(t\) 是否是平方数即可。

然后就做完了,\(1\) 的情况要讨论一下。

评测记录。

posted @ 2023-07-21 08:25  Ender_32k  阅读(8)  评论(0编辑  收藏  举报