随笔分类 - 树
摘要:splay #include <bits/stdc++.h> using namespace std; const int N = 5e6 + 10; int val[N], cnt[N], fa[N], ch[N][2], siz[N]; int tot, root; void maintain(
阅读全文
摘要:有旋Treap模板 //pointer version #include <bits/stdc++.h> using namespace std; struct Node { Node *ch[2]; int val, rank; int rep_cnt; int siz; Node(int val
阅读全文
摘要:AtCoder Beginner Contest 220 A - Find Multiple 水题 B - Base K 水题 C - Long Sequence 题意:有长度为$n$的序列$A$,$B$由连续$10^{100}$个$A$拼接而成,给你一个$X$,问你$B$的最小的前缀和位置$k$,
阅读全文
摘要:题意:一颗$n$个点的树,定义bud为某个点至少有一个儿子,所有儿子均为叶子结点且这个点不为根,你可以将任意一个bud和它的所有儿子移动到另外一个顶点上,可以操作任意次,问最后的叶子结点数最少是多少. 题解:假如我们将一个bud移到另一个叶子结点上后,bud的父亲变成了一个叶子结点,那么会发现,总叶
阅读全文
摘要:题意:有一颗树,每个结点都有一个取值范围$[L_i,R_i]$,答案为所有相邻点的绝对值之差之和,现在要你确定每个点的值,求最大答案. 题解:求相邻点的最大绝对值之差,那么肯定是取两个点的左端点和右端点最优,树形dp板子题. 代码: #include <bits/stdc++.h> #define
阅读全文
摘要:题意:给你$n$个升序的点,问你是否能构造一颗二叉搜索树,且每个儿子节点和父节点的$gcd>1$. 题解:首先可以预处理每两个点之间的$gcd$,我们先考虑暴力的写法,设$dp[l][r][k]\(表示区间\)[l,r]$以$k$为根节点是否合法,那么如果$dp[l][r]k]$要合法的话,其左儿子
阅读全文