dsu on tree 模板】的更多相关文章

With $Dsu \ on \ tree$ we can answer queries of this type: How many vertices in the subtree of vertex $v$ has some property in $O (n \log n)$ time (for all of the queries)? 这题写的是轻重儿子(重链剖分)版本的 $Dsu \ on \ tree$ 具体流程如下: 每次先递归计算轻儿子,再单独递归重儿子,计算完后轻儿子的一些信息…
题目链接 dsu on tree详见这. \(Description\) 给定一棵树.求以每个点为根的子树中,出现次数最多的颜色的和. \(Solution\) dsu on tree模板题. 用\(sum[i]\)表示出现次数为\(i\)的颜色的和,\(cnt[i]\)表示出现次数为\(i\)的颜色有多少个(其实用个\(Max\)表示当前最多的次数,和每种颜色出现次数\(tm[i]\)就好了),然后..就这样了.. 可以用DFS序代替DFS减少一些常数. 再写一遍dsu on tree大体过程…
传送门 题意: 求子树众数. 思路: \(dsu\ on\ tree\)模板题,用一个桶记录即可. 感觉\(dsu\ on\ tree\)这个算法的涉及真是巧妙呀,保留重链的信息,不断暴力轻边,并且不断在子树内递归下去.又由于轻边数量不会超过\(O(logn)\),所以总的时间复杂度控制在\(O(nlogn)\). /* * Author: heyuhhh * Created Time: 2019/11/13 15:09:25 */ #include <bits/stdc++.h> #defi…
前言 一次模拟赛的\(T3\):传送门 只会\(O(n^2)\)的我就\(gg\)了,并且对于题解提供的\(\text{dsu on tree}\)的做法一脸懵逼. 看网上的其他大佬写的笔记,我自己画图看了一天才看懂(我太蒻了),于是就有了这篇学习笔记. 概念篇/基础运用 算法简介 现在考虑这样一类树上统计问题: 无修改操作,询问允许离线 对子树信息进行统计(链上的信息在某些条件下也可以统计) 树上莫队?点分治? \(\text{dsu on tree}\)可以把它们吊起来打! \(\text{…
十几天前看到zyf2000发过关于这个的题目的Blog, 今天终于去学习了一下 Codeforces原文链接 dsu on tree 简介 我也不清楚dsu是什么的英文缩写... 就像是树上的启发式合并 用到了\(heavy-light\ decomposition\)树链剖分 把轻边子树的信息合并到重链上的点里 因为每次都是先dfs轻儿子再dfs重儿子,只有重儿子子树的贡献保留,所以可以保证dfs到每颗子树时当前全局维护的信息不会有别的子树里的,和莫队很像 算法过程 find the BigC…
先瞎扯几句 说起来我跟这个算法好像还有很深的渊源呢qwq.当时在学业水平考试的考场上,题目都做完了不会做,于是开始xjb出题.突然我想到这么一个题 看起来好像很可做的样子,然而直到考试完我都只想出来一个莫队的暴力.当时我想知道有没有比莫队更优的做法,和zbq讨论了半天也只能搞出一个$O(nlog^2n)$的平衡树启发式合并 然后!!我就把这题出给校内互测了!!没错,当时是用莫队当的标算! 结果!mjt用一个假的$O(n)$算法艹过去了因为数据特别水 后来我打算把这题出给另一场比赛,结果到了前一天…
dsu on tree跟冰茶祭有什么关系啊喂 dsu on tree的模板题 思想与解题过程 类似树链剖分的思路 先统计轻儿子的贡献,再统计重儿子的贡献,得出当前节点的答案后再减去轻儿子对答案的贡献 似乎很蠢 但是复杂度是\(O(nlogn)\)的,在没有修改的情况下,可以把树上莫队吊起来打 没了 代码实现 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int…
dsu on tree,又名树上启发式合并.重链剖分,是一类十分实用的trick,它常常可以作为一些正解的替代算法: 1.DFS序+线段树/主席树/线段树合并 2.对DFS序分块的树上莫队 3.长链剖分(但复杂度会多一个log) 4.点分治(通常可以做有根树的点分治) 重链剖分的概念,用一个DFS找到每个点最大的一个儿子,作为它的重儿子,并将它标记.则从上到下一段连续的标记点就成为一条重链. 重链剖分有一个常用的性质:每个点到根的路径上,至多经过$O(\log n)$条重链.点分治.树链剖分都用…
DSU on tree 在之前的一次比赛中,学长向我们讲了了这样一个神奇的思想:DSU on tree(树上启发式合并),看上去就非常厉害--但实际上是非常暴力的一种做法;不过暴力只是看上去暴力,它在处理不带修改的子树统计问题时有着优秀的时间复杂度\(O(Nlog N)\),显然在处理这一类问题上,它是优于我们常用的\(dfs\)序后莫队,更关键是它十分好写. 算法实现: 首先对所有轻儿子的子树信息进行统计,然后暴力擦除所有轻儿子的影响.再统计重儿子为根的子树信息,并将轻儿子的信息合并起来,加上…
Prelude 很好的模板题. 传送到Codeforces:(* ̄3 ̄)╭ Solution 首先要会DSU on Tree,不会的看这里:(❤ ω ❤). 众所周知DSU on Tree是可以用来处理子树信息的,但是有时候也可以用来处理链上信息. IOI 2011 Race是一道著名的点分治模板题,要求统计链信息,也可以用DSU on Tree来做,题目链接在这里:(✿◕‿◕✿). 基本思路和点分治是一样的,对于每个点u,我们统计出所有经过u的路径的信息. 于是我们有了一个非常好的思路:统计每…