对于这种子树询问的问题,很容易想到DSU on TreeDSU on Tree。 其实这道题就是一个板子题吧。 考虑加入或删除一种颜色最多使众数的出现次数变化11,因此只要记录每种数的出现次数,并对每种出现次数开个桶即可维护出答案。 代码:O(nlogn)O(nlogn) #include<bits/stdc++.h> #define Tp template<typename Ty>...
1.dfs跑一下树上点的dfs序。 2.将树上点按dfs序进行√nn分块。 3.对每个点按左端点的块序号和右端点的大小排序。 inlineintcmp(Node aa,Node bb){returnaa.ls==bb.ls?aa.r<bb.r:aa.ls<bb.ls; } 4.开始莫队,用num[x]数组统计出现x次的颜色的序号和。转移时将原先的减去,再加上现在的。 inline...
h> using namespace std; //#pragma GCC optimize(2) #define ull unsigned long long #define ll long long #define pii pair<int, int> #define pdd pair<double, double> #define re register #define lc rt<<1 #define rc rt<<1|1 const int maxn = 1e5 +...
CF600E Lomsat gelral(虚树做法) 题目 。 题解 另有 的解法。 我写的是虚树的做法。对于每种颜色建虚树,然后在虚树上求一次子树size,然后每个虚树上的点对原树上对应点做初步贡献。 最后再 一遍求答案。 存答案我用的是结构体,存最大值和编号之和。可以简单合并。 考虑证明上面的做法对于一种颜色,在初步贡...
CF600E Lomsat gelral 题意:给你一棵有$n$个节点的树,每个节点有点权$val$,求每个点子树点权众数之和 $n\le10^5 $ 分析: 由于不带修改,$n$范围相对较小,可以想到将子树转化为DFS序用莫队解决 每一次$DFS$到点$u$时,对应的询问的左端点即为当前DFS序,在以$u$为根的$DFS$递归结束后,右端点即为...
Codeforces 600E Lomsat gelral 树上启发式合并 题意 一棵树,每一个点有一个颜色,统计以每一个节点为根的子树中出现次数最多的颜色的编号,如果有多个颜色,统计他们的和。 思路 学习了一下dsu on the tree,安利一下良心博客1,博客2,以及CF官方解答。 算法的大致过程: 首先将树轻重链剖分,在dfs的过程中先df...
// Problem: CF600E Lomsat gelral // Contest: Luogu // URL: https://www.luogu.com.cn/problem/CF600E // Memory Limit: 250 MB // Time Limit: 2000 ms // // Powered by CP Editor (https://cpeditor.org) // Problem: B. Rising Sand ...
【线段树】[LUOGU CF600E Lomsat gelral] 区间众数和 题目: 题目链接:[LUOGU CF600E Lomsat gelral] 题解: 这个题就是个(动态开点)权值线段树的板子题,就是在每个点上建立一个取值线段树,记录区间众数和,不断是合并权值线段树就行,在up里面就进行对于众数的判断即可。 这里再说一下权值线段树,之前说过,这就...
CF600E Lomsat gelral 【线段树合并】题目链接 CF600E 题解 容易想到就是线段树合并,维护每个权值区间出现的最大值以及最大值位置之和即可 对于每个节点合并一下两个子节点的信息 要注意叶子节点信息的合并和非叶节点信息的合并是不一样的 由于合并不比逐个插入复杂度高,所以应是(O(nlogn))的 #include<...
dsu on tree(CF600E Lomsat gelral) 题意 一棵树有n个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和。 dsu on tree 用来解决子树问题 好像不能带修改?? 暴力做这个题,就是每次扫一遍子树统计答案 时间\(O(n^2)\) 或者会高级的数据结构解决 空间,编程难度是个...