[学习笔记]Dsu On Tree
[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的话,也可以考虑长链剖分
(这个题,可以用桶前后差分做到O(n),长链剖分也可以O(n)的)
二进制数记录某个深度的所有字符出现次数奇偶性
倍增找到k级祖先,记录某个深度的点出现次数
每个深度用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的更多相关文章
- [学习笔记]dsu on a tree(如何远离线段树合并)
https://www.zybuluo.com/ysner/note/1318613 背景 这玩意来源于一种有局限性的算法. 有一种广为人知的,树上离线维护子树信息的做法. (可以参照luogu360 ...
- 决策树学习笔记(Decision Tree)
什么是决策树? 决策树是一种基本的分类与回归方法.其主要有点事模型具有可得性,分类速度快.学习时,利用训练数据,根据损失函数最小化原则建立决策树模型:预测时,对新数据,利用决策树模型进行分类. 决策树 ...
- [学习笔记] Uplift Decision Tree With KL Divergence
Uplift Decision Tree With KL Divergence Intro Uplift model 我没找到一个合适的翻译,这方法主要应用是,探究用户在给予一定激励之后的表现,也就是 ...
- 【学习笔记】K-D tree 区域查询时间复杂度简易证明
查询算法的流程 如果查询与当前结点的区域无交集,直接跳出. 如果查询将当前结点的区域包含,直接跳出并上传答案. 有交集但不包含,继续递归求解. K-D Tree 如何划分区域 可以借助下文图片理解. ...
- dsu on tree 树上启发式合并 学习笔记
近几天跟着dreagonm大佬学习了\(dsu\ on\ tree\),来总结一下: \(dsu\ on\ tree\),也就是树上启发式合并,是用来处理一类离线的树上询问问题(比如子树内的颜色种数) ...
- 树上启发式合并(dsu on tree)学习笔记
有丶难,学到自闭 参考的文章: zcysky:[学习笔记]dsu on tree Arpa:[Tutorial] Sack (dsu on tree) 先康一康模板题吧:CF 600E($Lomsat ...
- dsu on tree学习笔记
前言 一次模拟赛的\(T3\):传送门 只会\(O(n^2)\)的我就\(gg\)了,并且对于题解提供的\(\text{dsu on tree}\)的做法一脸懵逼. 看网上的其他大佬写的笔记,我自己画 ...
- [dsu on tree]【学习笔记】
十几天前看到zyf2000发过关于这个的题目的Blog, 今天终于去学习了一下 Codeforces原文链接 dsu on tree 简介 我也不清楚dsu是什么的英文缩写... 就像是树上的启发式合 ...
- dsu on tree 学习笔记
这是一个黑科技,考虑树链剖分后,每个点只会在轻重链之间转化\(log\)次. 考虑暴力是怎么写的,每次枚举一个点,再暴力把子树全部扫一边. \(dsu\ on\ tree.\)的思想就是保留重儿子不清 ...
随机推荐
- Mybatis中 collection 和 association 的区别?
public class A{ private B b1; private List<B> b2;} 在映射b1属性时用association标签,(一对一的关系) 映射b2时用colle ...
- linux下文件加密方法总结
为了安全考虑,通常会对一些重要文件进行加密备份或加密保存,下面对linux下的文件加密方法做一简单总结: 方法一:gzexe加密这种加密方式不是非常保险的方法,但是能够满足一般的加密用途,可以隐蔽脚本 ...
- 如何用chrome查看post get及返回的数据
chrome浏览器按下F12打开开发者工具 点击Network,找到过滤器 筛选XHR,Method那一列会显示POST GET:
- Anaconda2和Anaconda3同时安装
转载于:https://www.cnblogs.com/zle1992/p/6720425.html 1.先从网站(国内的清华镜像:https://mirrors.tuna.tsinghua.edu. ...
- 小学四则运算APP 最后阶段
团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 这次发布的是我们APP的最终版本!图片背景有根据用户需求改变!还增加了草稿纸运算的画布功能! 运行结果如下: package com.ex ...
- 分布式版本控制系统Git的安装与使用(作业2)
(本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2103) 分布式版本控制系统Git的安装与使用 一.安装Git b ...
- enumerate()函数用法
enumerate 函数用于遍历序列中的元素以及它们的下标:
- Golang的panic和recover
panic 关键字panic的作用是制造一次宕机,宕机就代表程序运行终止,但是已经“生效”的延迟函数仍会执行(即已经压入栈的defer延迟函数,panic之前的). 为什么要制造宕机呢?是因为宕机不容 ...
- Linux curl 一例
root@PC-RENGUOQIANG:~# curl http://kermit:kermit@192.168.66.182:8080/activiti-rest/service/repositor ...
- Resolved validation conflict with readonly
/** * Bug绕过去方案WorkAround * Bug描述: * JQuery的Validation的和form的input元素设为readonly,一对不可调和的矛盾: * 一个设置为requ ...