生活在树上(hard version) 树上差分

  • 前言 : 生活在树上——始终热爱大地——升上天空。

  • 题目 : 生活在树上(hard version)

  • 大致题意

    给出一颗 n 个节点的树, 每个点 u 有权值 wu , 有 m 个询问, 求两个节点 u,v 之间的路径上是否有一个点 t 满足所有 路径 (u,t), (v,t) 所经过的所有结点权值异或和为 k

    其中 n105,m105,wi107

  • 思路

    考虑记录 distu 为根节点到 u 的结点权值异或和, 然后可以套路地转化为求路径 (u,v) 上有没有点 t 其权值为 kdistudistvwlca(u,v)=wt

    然后我们发现路径也是可以树上差分, 拆出来 u,v,lca(u,v),falca(u,v) 到根节点的路径, 然后开一个桶去计数即可, 结合倍增时间复杂度 O(nlog2n) 其时间复杂度瓶颈在于求最近公共祖先。

  • 代码

posted @   Cust10  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示