• 这是一个黑科技,考虑树链剖分后,每个点只会在轻重链之间转化\(log\)次。
  • 考虑暴力是怎么写的,每次枚举一个点,再暴力把子树全部扫一边。
  • \(dsu\ on\ tree.\)的思想就是保留重儿子不清空,每次扫一边轻儿子,再把轻儿子的贡献加上。
  • 关键代码:
void Dfs2(R i,R fm,R op){
for(R k=hd[i];k;k=nt[k])
if(to[k]!=fm&&to[k]!=sn[i])
Dfs2(to[k],i,0);
if(sn[i])Dfs2(sn[i],i,1),vis[sn[i]]=1;
upd(i,fm,1),vis[sn[i]]=0,ans[i]=sum[Mx];
if(!op)upd(i,fm,-1);
}
  • 其中\(upd\)表示计算子树内部除开\(vis\)的答案。
  • 首先枚举所有的轻儿子把轻儿子答案算出来。
  • 注意这个时候是没有加到这个儿子的答案的,因为轻儿子的贡献算完即撤销。
  • 然后递归重儿子,算重儿子的答案,这个时候重儿子的答案不会撤销,所以\(Dfs\)完之后数组内仍然保留了重儿子的信息。
  • 然后\(upd\),就是重新计算除了重儿子之外别的儿子的贡献。
  • 然后更新当前点的答案。
  • 最后如果当前点不是重儿子,就把整个子树的所有信息清空,否则保留。
  • 复杂度是\(O(nlogn)\)的

烂大街的例题:

  • CF600E Lomsat gelral
  • 一棵树有n个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和。
  • 模板题,维护每个颜色的出现次数和每种次数的颜色编号之和,修改类似于莫队是均摊\(O(1)\)的,实时维护最大值是多少即可。
  • 复杂度\(O(nlogn)\)

dsu on tree 学习笔记的更多相关文章

  1. dsu on tree学习笔记

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

  2. 珂朵莉树(Chtholly Tree)学习笔记

    珂朵莉树(Chtholly Tree)学习笔记 珂朵莉树原理 其原理在于运用一颗树(set,treap,splay......)其中要求所有元素有序,并且支持基本的操作(删除,添加,查找......) ...

  3. Codeforces 600E. Lomsat gelral(Dsu on tree学习)

    题目链接:http://codeforces.com/problemset/problem/600/E n个点的有根树,以1为根,每个点有一种颜色.我们称一种颜色占领了一个子树当且仅当没有其他颜色在这 ...

  4. Link Cut Tree学习笔记

    从这里开始 动态树问题和Link Cut Tree 一些定义 access操作 换根操作 link和cut操作 时间复杂度证明 Link Cut Tree维护链上信息 Link Cut Tree维护子 ...

  5. 矩阵树定理(Matrix Tree)学习笔记

    如果不谈证明,稍微有点线代基础的人都可以在两分钟内学完所有相关内容.. 行列式随便找本线代书看一下基本性质就好了. 学习资源: https://www.cnblogs.com/candy99/p/64 ...

  6. k-d tree 学习笔记

    以下是一些奇怪的链接有兴趣的可以看看: https://blog.sengxian.com/algorithms/k-dimensional-tree http://zgjkt.blog.uoj.ac ...

  7. splay tree 学习笔记

    首先感谢litble的精彩讲解,原文博客: litble的小天地 在学完二叉平衡树后,发现这是只是一个不稳定的垃圾玩意,真正实用的应有Treap.AVL.Splay这样的查找树.于是最近刚学了学了点S ...

  8. LSM Tree 学习笔记——本质是将随机的写放在内存里形成有序的小memtable,然后定期合并成大的table flush到磁盘

    The Sorted String Table (SSTable) is one of the most popular outputs for storing, processing, and ex ...

  9. LSM Tree 学习笔记——MemTable通常用 SkipList 来实现

    最近发现很多数据库都使用了 LSM Tree 的存储模型,包括 LevelDB,HBase,Google BigTable,Cassandra,InfluxDB 等.之前还没有留意这么设计的原因,最近 ...

随机推荐

  1. 大型网站技术架构,4网站的高性能架构之Web前端性能优化

    一般说来Web前端指网站业务逻辑之前的部分,包括浏览器加载.网站视图模型.图片服务.CDN服务等,主要优化手段有优化浏览器访问.使用反向代理.CDN等. 4.2.1 浏览器访问优化 1.减少http请 ...

  2. str_shuffle函数

      str_shuffle() 函数打乱一个字符串,使用任何一种可能的排序方案.     <?php $str = 'hello world '; echo str_shuffle($str); ...

  3. 【洛谷P1310 表达式的值】

    题目链接 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例如:计算表达式 ...

  4. 《图解 CSS3 核心技术与案例实战》

    第一章 解开 CSS3 的面纱 使用 CSS3 的好处 减少开发和维护成本:如传统实现圆角边框需要绘图.切图才能完成,而使用 css 可以直接完成 提高页面性能 渐进增强(Progressive En ...

  5. winform项目中开发的一套UI控件库

    https://github.com/houyhea/winform-control-lib winform-control-lib 曾经在一个winform项目中开发的一套UI控件库 类图:  效果 ...

  6. MongoDB优化心得分享

    这里总结下这段时间使用mongo的心得,列出了几个需要注意的地方. 1. 系统参数及mongo参数设置 mongo参数主要是storageEngine和directoryperdb,这两个参数一开始不 ...

  7. 使用 Spring HATEOAS 开发 REST 服务

    使用 Spring HATEOAS 开发 REST 服务 学习博客:https://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/ htt ...

  8. 设置HTML中字体的粗细

    设置font-weight 属性:normal : 默认值.正常的字体.相当于 400 .声明此值将取消之前任何设置bold : 粗体.相当于 700 .也相当于 b 对象的作用bolder : 比 ...

  9. Nginx配置之rewrite、proxy_pass、upstream、location

    如图,这是Nginx的配置文件nginx.conf中的一段配置代码. 在http段中定义了一个名为webservers的upstream模块,主要用于负载均衡. 在server模块中,定义了一个loc ...

  10. oracle--表类型