题意:求每一个子树存在最多颜色的颜色代号和(可重复) 本题是离线统计操作,因此可以直接合并重儿子已达到\(O(nlogn)\)的复杂度 PS.不知道什么是启发式合并的可以这样感受一下:进行树链剖分,分出重儿子和轻儿子,每次离线dfs时保留重儿子得出的贡献,清除轻儿子的贡献并重新遍历 (反正是一种取代树上莫队的简单粗暴玩意,但是效率贼tm好) 唯一不解的小细节是似乎我在轻儿子的撤销操作中更新tmp存在问题,改了另一种写法就A了 想不出反例,求指教 Update:看出来了,是我傻缺.. #inclu…
题目链接 题目大意:给出一颗含有$n$个结点的树,每个节点有一个颜色.求树中每个子树最多的颜色的编号和. ------------------------- 树上启发式合并(dsu on tree). 我们先考虑暴力怎么做.遍历整颗树,暴力枚举子树然后用桶维护颜色个数.这样做是$O(n^2)$的,显然会T.我们需要一种更快的算法:树上启发式合并. 关于启发式算法的介绍,详见OI Wiki.本文只介绍树上启发式合并算法.本题的解法: 每处理完一颗子树,我们都要把桶清空一次,以免对它的兄弟造成影响.…
You are given a rooted tree with root in vertex 1. Each vertex is coloured in some colour. Let's call colour c dominating in the subtree of vertex v if there are no other colours that appear in the subtree of vertex v more times than colour c. So it'…
600E - Lomsat gelral 题意 给出一颗以 1 为根的树,每个点有颜色,如果某个子树上某个颜色出现的次数最多,则认为它在这课子树有支配地位,一颗子树上,可能有多个有支配的地位的颜色,对每颗子树分别求有支配地位的颜色的和(把颜色这个权值相加). 分析 树上启发式合并模板题. 参考blog1 参考blog2 复杂度证明 如果暴力去搜索,显然是 \(O(n^2)\) 的算法,可以考虑优化,当我们搜索到节点 u 时,最后去搜索 u 的子节点中子树节点数量最大的子节点(树链剖分求出重儿子)…
学习:http://codeforces.com/blog/entry/44351 E. Lomsat gelral 题意: 给定一个以1为根节点的树,每个节点都有一个颜色,问每个节点的子树中,颜色最多的是哪几种颜色,输出这些颜色的值得和. 思路: 树上启发式合并的模板题,具体来说,先对树进行树链剖分,分出一个重链和轻边,dfs时,把每条轻儿子暴力加到根节点中,每次加的时候,用这样的技巧 if(csz < cnt[col[v]]) sum = col[v] , csz = cnt[col[v]]…
[Codeforces600E] Lomsat gelral(树上启发式合并) 题面 给出一棵N个点的树,求其所有子树内出现次数最多的颜色编号和.如果多种颜色出现次数相同,那么编号都要算进答案 N≤100000 分析 树上启发式合并,用map记录颜色出现次数,合并的时候更新最多的出现次数和编号和. 注意合并时的下标问题.当我们merge(x,y)的时候,由于是启发式合并,s[x]可能会并到s[y]去,如果我们直接查询s[x],就查不到真正的答案.所以要再建立一个数组id[x],记录x的map合并…
题目戳我 \(\text{Solution:}\) 树上启发式合并,是对普通暴力的一种优化. 考虑本题,最暴力的做法显然是暴力统计每一次的子树,为了避免其他子树影响,每次统计完子树都需要清空其信息. 但是,如果我们先对非\(x\)的节点进行统计,最后统计\(x\)然后合并其他节点的信息,那么,\(x\)的统计信息就没有必要被删掉. 那么显然地,\(x\)的子树越大越好. 于是,自然想到轻重链剖分,并将\(x\)设置为其重儿子.于是,算法模型如下: 对所有非重儿子进行统计并清空其所记录的统计信息.…
208E - Blood Cousins 题意 给出一棵家谱树,定义从 u 点向上走 k 步到达的节点为 u 的 k-ancestor.多次查询,给出 u k,问有多少个与 u 具有相同 k-ancestor 的节点. 分析 设 rt 为 u 的 k-ancestor.问题可以转换成在以 rt 为根的子树下,有多少个节点的深度与 u 相同. 预处理出离 u 距离为 k 的祖先 rt . 我们可以把所有的查询用向量存起来(祖先节点,要查询的节点的深度,对应查询的id),在遍历到某个祖先节点时,统计…
有丶难,学到自闭 参考的文章: zcysky:[学习笔记]dsu on tree Arpa:[Tutorial] Sack (dsu on tree) 先康一康模板题吧:CF 600E($Lomsat$ $gelral$) 虽然已经用莫队搞过一遍了(可以参考之前写的博客~),但这个还是差距挺大 我们如果对于每个节点暴力统计答案,是$O(N^2)$的复杂度:最坏情况下整棵树是一条链,对于每个节点的统计平均下来是$O(N)$的 具体是怎么做的呢? 对于以当前节点$x$为根的子树,我们建立$cnt$和…
参考资料 https://www.cnblogs.com/zhoushuyu/p/9069164.html https://www.cnblogs.com/candy99/p/dsuontree.html https://www.cnblogs.com/zcysky/p/6822395.html 简介 树上启发式合并 用到了heavy−light decomposition树链剖分 把轻边子树的信息合并到重链上的点里 因为每次都是先dfs轻儿子再dfs重儿子,只有重儿子子树的贡献保留,所以可以保…