![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树---树上启发合并
pengwill97
C.S Master
展开
-
【算法练习】CodeForces600E Lomsat gelral (树上启发合并)
题意给定一棵树,每个节点有颜色c[i],定义子树u中出现次数最多的颜色为u的主要颜色(可以有多个),求每个节点的主要颜色数值和。题解树上启发合并 dus on treedus on treedus \ on \ tree。 启发合并的意思就是说,将秩小的合并到秩大的上,有点并查集按秩合并的意思。而并查集的秩是和其下面的节点个数相关,树上也...原创 2018-08-05 10:46:33 · 198 阅读 · 0 评论 -
【算法练习】CodeForces570D Tree Requests(树上启发合并)
题意给定一棵树,树上每个节点上有一个小写字符,给出一些询问,询问包括节点和深度,求出以这个节点为固定深度的节点上能否组成一个回文串。题解子树静态的问题,所以考虑树上启发合并,其实就是如何维护答案。 首先考虑回文串出现的条件,组成回文串的所有字母中奇数个的字母不超过1个。 由于总的字母类别不超过26个,我们可以利用二进制的思想,即每一个字母对应二进制的一位,若一个字母出现奇数次,...原创 2018-08-05 19:02:34 · 303 阅读 · 0 评论 -
【算法练习】SGU 507 Treediff(树上启发合并)
题意对于每个非叶子节点,在子树中找到两个叶子节点使得它们的权值之差的绝对值最小。如果子树内只有一个节点。输出231−1231−12^{31}-1 题解启发式合并代码#include<bits/stdc++.h>using namespace std;typedef double db;typedef long long ll;typedef unsi...原创 2018-08-05 22:29:23 · 515 阅读 · 0 评论 -
【算法练习】CodeForces1007F Dominant Indices (树上启发合并)
题意求每个点的子树中哪一层节点数最多,如果有节点数最多不唯一,取层数最小的。题解树上启发合并。开个数组记录当前深度的节点数目,每次更新时保存答案,注意求得是对于子树的深度,所以最后要减去递归时节点的深度。 复杂度O(nlogn)O(nlogn)O(nlogn) 这道题是被题意卡了,完全不知道题面再说什么。。代码#include<bits/stdc++.h>...原创 2018-08-07 09:30:00 · 275 阅读 · 0 评论 -
【算法训练】CodeForces208E Blood Cousins(树上启发合并)
题意在一棵树上,如果两个节点a和b向上的第p个祖先相同,就称他们为p代表亲。(跟日常生活中有所不同,p不一定是他们的最近公共祖先)。 给出一些询问,问v的p代表亲的数量。 题解对于每个询问,我们可以理解为,在结点v的p级祖先的子树中,和v深度相同的节点有多少个。 对于递归来说,是从叶子节点开始寻找答案的,也就是自底向上求答案、如果不知道v的p级祖先是谁,我们就无法离线处理询问。 ...原创 2018-08-08 21:44:10 · 356 阅读 · 0 评论