dfs序
LowestJN
强省弱OIer
展开
-
[BZOJ Contest-2017省队十连测推广赛2·T2][BZOJ4771][主席树][dfs序]七彩树
%%%Manchery先考虑没有深度限制,要计算子树中不同的颜色的个数,就令所有节点的初始权值为1,就把两两相同颜色的节点的LCA的权值-1,然后求一遍子树权值和就可以了。 但是这样做复杂度是O(n2)O(n^2),而且会在某个节点多次-1。其实只要把颜色相同的节点提出来,按照dfs序的标号排个序,然后在相邻的节点的LCA处-1就行了。然后考虑有深度限制,仔细想想发现这个限制特别像主席树,那么就以原创 2017-03-11 09:06:58 · 1259 阅读 · 0 评论 -
[BZOJ Contest-2017省队十连测推广赛1·T1][BZOJ4765][分块][dfs序]普通计算姬
考虑对1~n的序列分块令每个点在序列中的贡献aia_i为ii为根的子树的权值和,那么分块后可以求出块j的贡献和sumjsum_j,那么对于一个询问[l,r][l,r],这个区间里完整的块的答案可以扫一遍sumsum数组求出来,这样复杂度是O(n−−√)O(\sqrt n),剩下的点暴力求出这个点单个的贡献。怎么求单个点的贡献呢 可以用dfs序来维护子树的权值和,那么只用在dfs序上用树状原创 2017-03-07 20:27:49 · 1244 阅读 · 0 评论 -
[树上依赖多重背包 DP] BZOJ 4910 [Sdoi2017]苹果树
题目 t−h≤kt-h\le k 的限制其实就是选一条到叶节点的链,然后再选k个的最大值(因为vi都大于零)。因为 ai>1ai>1 的点,肯定是先选了第一个才会选第二个 所以可以把 ai>1ai>1 的点拆成两个点 i′,i′′i',i'',ai′=1ai'=1,ai′′=ai−1ai''=ai-1,让 i′′i'' 变成 i′i' 的儿子。这个树上依赖背包可以通过两个遍历子树顺序相反的后序遍历原创 2017-09-02 09:01:24 · 1400 阅读 · 0 评论 -
[dfs序 线段树] LOJ#6276. 果树
考虑相同颜色的两种节点,这两个节点会把树分成三部分(左、中、右),左部分的点不能和右部分的点组成一种方案枚举每一个点,只要求出有多少个点能和它组成合法点对就行了枚举每一对颜色相同的节点,在dfs序上搞一搞就行了#include #include #include #include using namespace std;typedef pairint,int> par;原创 2018-02-03 16:34:53 · 486 阅读 · 0 评论