[dsu on tree]【学习笔记】 - Candy? - 博客园

题单:

也称:树上启发式合并

可以解决绝大部分不带修改的离线询问的子树查询问题

流程:

1.重链剖分找重儿子

2.sol:全局用桶或者数据结构存信息。
  ①递归所有的轻儿子,回溯前删除贡献

  ②递归重儿子,不删除贡献

  ③暴力找所有轻儿子,加入贡献

  ④更新x的答案

  ⑤如果x是父亲的轻儿子,再把整个子树贡献删除(信息只有子树的,有时可以不用再dfs去重,可以直接清空)

正确性:

一个点的轻儿子会暴力更新到所有信息,重儿子链不会删除贡献,所以重儿子子树经过④之后轻儿子的贡献会保留下来,重儿子子树都有。

数据结构只会保留x子树的。

复杂度:

主要是④的暴力和⑤的删除。一个点到根的路径一共只有logn条轻边

每个轻边会额外删除一次、插入一次。总共是:O(nlogn)的

利用重链剖分的性质,保留重儿子的信息,轻儿子暴力更新

O(n^2)->O(nlogn)

好处:

(其实许多dsu的题都可以用主席树,线段树合并处理。)

1.好写

2.空间小。O(n)。全局的桶使得不用再花费logn的空间

3.可以精确打击。枚举轻儿子是把所有点再找一遍直接贡献到x上去。线段树合并和主席树就不太能精确查找。好比莫队。

4.可以处理一些有根树点分治

例题:

为了重儿子的信息一直适用,都是记录的绝对大小,也就是深度。

单纯和深度相关,并且边权为1的话,也可以考虑长链剖分

CF570D Tree Requests

(这个题,可以用桶前后差分做到O(n),长链剖分也可以O(n)的)

二进制数记录某个深度的所有字符出现次数奇偶性

CF208E Blood Cousins

倍增找到k级祖先,记录某个深度的点出现次数

CF246E Blood Cousins Return

每个深度用set去重。

CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

有根树点分治:

CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

挺不错的算法

有点类似分块莫队三元环计数。用顺序和规模限制了复杂度。且这个还是一个logn

[学习笔记]Dsu On Tree的更多相关文章

  1. [学习笔记]dsu on a tree(如何远离线段树合并)

    https://www.zybuluo.com/ysner/note/1318613 背景 这玩意来源于一种有局限性的算法. 有一种广为人知的,树上离线维护子树信息的做法. (可以参照luogu360 ...

  2. 决策树学习笔记(Decision Tree)

    什么是决策树? 决策树是一种基本的分类与回归方法.其主要有点事模型具有可得性,分类速度快.学习时,利用训练数据,根据损失函数最小化原则建立决策树模型:预测时,对新数据,利用决策树模型进行分类. 决策树 ...

  3. [学习笔记] Uplift Decision Tree With KL Divergence

    Uplift Decision Tree With KL Divergence Intro Uplift model 我没找到一个合适的翻译,这方法主要应用是,探究用户在给予一定激励之后的表现,也就是 ...

  4. 【学习笔记】K-D tree 区域查询时间复杂度简易证明

    查询算法的流程 如果查询与当前结点的区域无交集,直接跳出. 如果查询将当前结点的区域包含,直接跳出并上传答案. 有交集但不包含,继续递归求解. K-D Tree 如何划分区域 可以借助下文图片理解. ...

  5. dsu on tree 树上启发式合并 学习笔记

    近几天跟着dreagonm大佬学习了\(dsu\ on\ tree\),来总结一下: \(dsu\ on\ tree\),也就是树上启发式合并,是用来处理一类离线的树上询问问题(比如子树内的颜色种数) ...

  6. 树上启发式合并(dsu on tree)学习笔记

    有丶难,学到自闭 参考的文章: zcysky:[学习笔记]dsu on tree Arpa:[Tutorial] Sack (dsu on tree) 先康一康模板题吧:CF 600E($Lomsat ...

  7. dsu on tree学习笔记

    前言 一次模拟赛的\(T3\):传送门 只会\(O(n^2)\)的我就\(gg\)了,并且对于题解提供的\(\text{dsu on tree}\)的做法一脸懵逼. 看网上的其他大佬写的笔记,我自己画 ...

  8. [dsu on tree]【学习笔记】

    十几天前看到zyf2000发过关于这个的题目的Blog, 今天终于去学习了一下 Codeforces原文链接 dsu on tree 简介 我也不清楚dsu是什么的英文缩写... 就像是树上的启发式合 ...

  9. dsu on tree 学习笔记

    这是一个黑科技,考虑树链剖分后,每个点只会在轻重链之间转化\(log\)次. 考虑暴力是怎么写的,每次枚举一个点,再暴力把子树全部扫一边. \(dsu\ on\ tree.\)的思想就是保留重儿子不清 ...

随机推荐

  1. High-level structure of a simple compiler高級結構的簡單編譯器

    1.lexical analysis,which analyzes the character string presented to it and divides it up into tokens ...

  2. 12.12 Daily Scrum

    这周末我们会集成一下反馈活跃用户的模块. 另外,今天编译的第一次测试结束,周末这两天项目的进度会比之前加快一些.   Today's Task Tomorrow's Task 丁辛 实现和菜谱相关的餐 ...

  3. Java控制台常用命令

    http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html javaw是java的带console版本,其他一致. h ...

  4. Java用JSoup组件提取asp.net webform开发网页的viewstate相关相关参数

    /** * 从页面中提取特定input的的Value * @param formparams * @param document * @param elementId */ private void ...

  5. MySQL乐观锁在分布式场景下的实践

    背景 在电商购物的场景下,当我们点击购物时,后端服务就会对相应的商品进行减库存操作.在单实例部署的情况,我们可以简单地使用JVM提供的锁机制对减库存操作进行加锁,防止多个用户同时点击购买后导致的库存不 ...

  6. Mybatis源码分析

    MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简 ...

  7. docker 下运行 postgresql 的命令

    postgresql docker下启动的命令 docker run --name pgdata -p : -e POSTGRES_PASSWORD=Test6530 -v /pgdata:/var/ ...

  8. [转帖]老狼:你知道哪些关于 Windows 10 的骚操作?

    作者:老狼链接:https://www.zhihu.com/question/265781599/answer/579939418来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  9. ESXi虚拟机开机进入bios的方法

    想要修改启动顺序, 发现界面比较难弄 应该是在设置里面有修正. 首先编辑设置 增加如下设置 就可以了.

  10. PHP + JS 实现大文件分割上传

    服务器上传文件会有一定的限制.避免内存消耗过大影响性能,在 php.ini 配置文件中,有几个影响参数: upload_max_filesize = 2M //PHP最大能接受的文件大小 post_m ...