随笔分类 - 树
摘要:将要查询的信息放到 dfs 序上并用树状数组查一个前缀和即可.
阅读全文
摘要:最小生成树或者二分都行,但是最小生成树会好写一些~ Code:
阅读全文
摘要:把之前写的版本改了一下,这个版本的更好理解一些. 特地在一个链的最底端特判了一下. code: #include <bits/stdc++.h> #define N 200005 #define ll long long #define inf 10000000005 #define lson p[
阅读全文
摘要:建10棵动态树就完事了~
阅读全文
摘要:比赛的时候TLE,第二天发现合并方向合并错了~ 改了一下顺序就切了~ 又掉分了,好难过QAQ...... Code:
阅读全文
摘要:现在感觉还是挺好想的. Code:
阅读全文
摘要:发现对于任意一条边,起决定性作用的是节点编号更大的点. 于是,对于每一条边,按照节点编号较大值作为边权,按照最小生成树的方式插入即可. 最后用线段树维护 dfs 序做一个区间查询即可. Code:
阅读全文
摘要:这种问题的转化方式挺巧妙的. Code:
阅读全文
摘要:Description 给出一棵N个结点的树,选择L条路径,覆盖这些路径上的结点,使得被覆盖到的结点数最多。 Input 第一行两个正整数N、L(2 <= N <= 1,000,000, 0 <= L <= N)。下面有N-1行,每行两个正整数A和B(1 <= A, B <= N),表示一条边(A,
阅读全文
摘要:只想出来 $O(nlogn\times 160)$ 的复杂度,没想到还能过~ Code:
阅读全文
摘要:开始zz写了一个主席树,后来发现写个树状数组就行~
阅读全文
摘要:题意:求最长的树上路径点值的 $gcd$ 不为 $1$ 的长度. 由于只要求 $gcd$ 不为一,所以只要 $gcd$ 是一个大于等于 $2$ 的质数的倍数就可以了. 而我们发现 $2\times 10^5$ 以内的数最多只会有 $7$~$8$ 个本质不同的质因子,所以我们在点分治的时候暴力拆质因子
阅读全文
摘要:很容易想出二分这个思路,但是要想办法去掉一个 $log$. 没错,空间换时间. 双指针的部分错了好几次~ Code:
阅读全文
摘要:我这份代码已经奇怪到一定程度了~ 洛谷上一直 $TLE$,但是本地造了几个数据都过了. 简单说一下题解: 先建出来点分树. 对于每一个询问,在点分树中尽可能向上跳祖先,看是否能够处理这个询问. 找到最高点的好处就是该点的询问可以全部由那个祖先来统计. 因为祖先到 $x$ 是合法的,而那个祖先会统计子
阅读全文
摘要:这个就比较简单了~ Code:
阅读全文
摘要:感觉现在写点分治可快了~ 二分答案,就可以将求第 $k$ 大转换成一个判断问题,直接拿点分树判断一下就行了.
阅读全文
摘要:写了7k多,可以说是一己之力切掉了这道毒瘤题~ 开 $3$ 种堆,分别维护每个子树最大深度,以及每个节点在点分树中对父亲的贡献,和全局的最优解. 由于需要支持堆的删除,所以写起来特别恶心+麻烦. 细节巨多~
阅读全文
摘要:细节挺多的,但是也确实加深了我对动态点分治的理解. 这段代码值得关注: 点分树的结构是和原树不同的. 我们知道,最优决策点和根节点的连线上的点的答案一定是越来越优的. 而如果发现 $to[i]$ 所在子树中,$to[i]$ 更优,那么想在点分树中到达 $to[i]$,直接走到 $to[i]$所在重心
阅读全文
摘要:独立写出来+想出来的,1.5h就切了~ 建立点分树,然后用 $vector$ 暴力存所有子节点,然后二分一下子就可以了.
阅读全文