UOJ #33. 【UR #2】树上GCD

题目先求得GCD是iii的倍数的点对数再反演。用长链剖分求出子树内各个深度的节点个数,然后在合并子树的时候统计答案。先求出深度小的子树vvv的每个iii的倍数的点数,再O(maxdepv)O(maxdep_v)O(maxdepv​)枚举iii,在之前的子树中求出iii的倍数的点数,然后乘起来即可。在之前的子树中可以如果i>Si>Si>S就暴力,i<Si<Si&...
摘要由CSDN通过智能技术生成

题目
先求得GCD是 i i i的倍数的点对数再反演。
用长链剖分求出子树内各个深度的节点个数,然后在合并子树的时候统计答案。
先求出深度小的子树 v v v的每个 i i i的倍数的点数,再 O ( m a x d e p v ) O(maxdep_v) O(maxdepv)枚举 i i i,在之前的子树中求出 i i i的倍数的点数,然后乘起来即可。
在之前的子树中可以如果 i > S i>S i>S就暴力, i < S i<S i<S的就通过维护一个 g [ i ] [ j ] g[i][j] g[i][j]表示深度   m o d   i = j \bmod i=j modi=j的点数来统计。
这个 g g g的维护就是树上 d s u dsu dsu。。。
也可以暴力,平衡一下复杂度

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值