2018.10.17【校内模拟】友好国度(点分治)

版权声明:转载请声明出处,谢谢配合。 https://blog.csdn.net/zxyoi_dreamer/article/details/83118510

传送门(内网)


解析:

A A 的第一道点分治。。。
想起来我 A A 的第一道数位 D P DP 也是在考场上 Y Y YY 出来的呢(当时还套了一个状压)

思路:

看到题目发现很好写暴力, 30 p t s 30pts O ( n 2 ) O(n^2) 40 p t s 40pts 的状压,就把 70 p t s 70pts 到手了,场上滚去想 T 2 T2 正解就只写了两个暴力滚粗了。暴力还拿了全场最高分。。。暴力代码

然而我下来才发现,要是自己当时去想正解。。。可能就想出来了的。。。

这样一个问题,正解显然是点分治,然而怎么统计答案?

容斥原理!

显然,所有点对有 n ( n 1 ) / 2 n*(n-1)/2 个,那么我们没有简单的办法直接统计互质的对数,我们就统计不互质的对数!

现在考虑求出了以 r o o t root 为根的子树中的所有点到 r o o t root 的路径上的点权 g c d gcd ,怎么统计?

注意一个问题,这里可以简化一下。
我们将所有点权唯一分解 a = i = 1 k p i t i a=\prod_{i=1}^{k}p_i^{t_i} ,可以非常轻易的发现,在这里,质因子的次数对答案的影响只在于为不为 0 0 。那么我们将所有的点权唯一分解,只保留质因子的一次。这样可以简化问题。

然后就是容斥,我们将简化后的点权的 g c d gcd 再一次唯一分解,将它的所有因子全部计算出来。

所有这个因数的倍数的出现次数都需要被计算。考虑如果这个因数有奇数个质因子,那么它的贡献需要被剪去,否则需要加上。

是不是很像莫比乌斯函数(大雾)

扫描二维码关注公众号,回复: 3614222 查看本文章

剩下的就是点分治一样的容斥统计了。


code(内网)

猜你喜欢

转载自blog.csdn.net/zxyoi_dreamer/article/details/83118510