XorDistances

[ABC201E] Xor Distances

首先,根据 aa=0,一条路径 dis(u,v)=(dis(1,LCA)dis(1,u))(dis(1,LCA)dis(1,v)),消去相同的,得 dis(1,u)dis(1,v)

预处理从 1 到每个点的前缀异或,问题被转换成从 n 个数中选两个两两异或的总和。

按照位考虑,将每个数拆成 60 位,记录到数组中,令 onei 表示 n 个数中第 i 位为 1 的数。

然后枚举每一个数,对于每一位的答案为与它这一位不同的数的个数 × 这一位的权值。

复杂度 O(60n)

注意位运算的取模,即 (1<<60)×n 可能爆炸,需要先取模。

代码

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17596106.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(13)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起