随笔分类 -  题解

摘要:分析 没脑子的题目。 一眼换根 DP。定义 \(\mathit{f}_{i}\) 表示 \(i\) 到 \(i\) 为根子树中某一个节点的距离最大值;\(\mathit{g}_{i}\) 表示 \(i\) 经过其父节点到某个节点的距离最大值。那答案就是 \(\max(\mathit{f}_i,\ma 阅读全文
posted @ 2024-03-07 13:07 harmis_yz 阅读(34) 评论(0) 推荐(0)
摘要:分析 对于异或,有性质 \(a \oplus b = c,a \oplus c =b,a \oplus a =0\)。则对于 \(a_i \oplus a_{i+1}\),其表示的结果就是 \(b_{i} \oplus b_{i+2}\)。做一个前缀异或和,就能够得到 \(b_1\) 与 \(b_2 阅读全文
posted @ 2024-03-07 13:05 harmis_yz 阅读(26) 评论(0) 推荐(0)
摘要:分析 考虑并查集。 对于 \(a_i,b_i,d_i\),若 \(a_i,b_i\) 在之前的满足要求的操作中,\(a_i,b_i\) 不在同一个集合里,则在之前 \(X_{a_i},X_{b_i}\) 的相对差值是可以任意改变的。令 \(k=X_{a_i}-X_{b_i}\),则我们需要将 \(a 阅读全文
posted @ 2024-03-07 13:04 harmis_yz 阅读(13) 评论(0) 推荐(0)
摘要:分析 一眼树上启发式合并。 定义 \(x_i\) 为节点 \(i\) 在序列 \(p\) 中的下标。则问题转化为:对于每组 \(l,r,k\),询问以 \(k\) 为根的子树中是否有一个以上的节点,满足 \(l \le x_j \le r\)。 使用 set 存以 \(i\) 为根的子树中 \(x_ 阅读全文
posted @ 2024-03-07 13:02 harmis_yz 阅读(17) 评论(0) 推荐(0)
摘要:分析 对于区间问题,考虑莫队。 和这个一样转化问题。 把树变成 DFS 序之后,在序列上询问区间就是普通莫队模板了。用 set 记录当前区间里存放的有序 \(x'\)。移动完指针之后的判断是否存在就直接在 set 里二分。复杂度虽然大了不止一点,但是 \(3\) 秒还是能过的。没有压力。 代码 #i 阅读全文
posted @ 2024-03-07 13:01 harmis_yz 阅读(15) 评论(0) 推荐(0)
摘要:分析 先考虑 \(k=n\) 的情况。 对于 \(s_j=M\) 的时候,其能够匹配的 \(s_i=D\) 的数量很显然是 \(i \le j-1\) 的时候的数量,求前缀和就能得到。而对于 \(s_j=C\) 的时候,能够完整匹配的就是 \(i \le j-1\) 的时候所有 \(s_i=M\) 阅读全文
posted @ 2024-03-07 13:00 harmis_yz 阅读(20) 评论(0) 推荐(0)
摘要:分析 \(1 \le N \le 17\),一眼状压。 定义 \(f_{s,i}\) 表示从 \(1\) 走到 \(i\),且经过点的状态为 \(s\) 的最小代价。不难推出转移方程:\(f_{s+2^{j-1},j}=\min(f_{s,i}+val_{i,j})\)。其中 \(val_{i,j} 阅读全文
posted @ 2024-03-07 12:59 harmis_yz 阅读(18) 评论(0) 推荐(0)
摘要:分析 考虑启发式合并。 统计 \(cnt_{i,j}\) 表示在 \(i\) 这个集合中,是 \(j\) 班的人数。\(id_{i}\) 表示 \(i\) 所在集合下标。根据启发式合并模板,在保证是小集合往大集合合并的情况下,将每个小集合元素 \(x\) 所在的班级都在大集合的 \(cnt\) 里增 阅读全文
posted @ 2024-03-07 12:58 harmis_yz 阅读(41) 评论(0) 推荐(0)
摘要:分析 考虑枚举。 注意到第二个条件是必须要有 $25$ 个字符在里面出现过,故考虑枚举唯一没出现过的字符 $k$,然后再枚举 $s_i$。 令 $cnt_{i,j}$ 表示 $s_i$ 中字符 $c$ 出现的奇偶性。如果有字符 $c \ne k \land cnt_{i,c}=0$,则在 $s_j$ 阅读全文
posted @ 2024-03-05 19:04 harmis_yz 阅读(18) 评论(0) 推荐(0)
摘要:分析 考虑状压。 定义状态函数 \(f_{i,j}\) 表示在得到 \(C\) 出现过的状态为 \(i\) 且排列末尾为 \(j\) 时的最小代价。则有转移方程:\(f_{i,j}=\min\{f_{i',k}+dis_{k,j}\}\),保证 \(i'\) 表示集合属于 \(i\)。\(dis_{ 阅读全文
posted @ 2024-03-05 19:04 harmis_yz 阅读(26) 评论(0) 推荐(0)
摘要:比 E 简单。 分析 考虑暴力 DP。 定义状态函数 $f_i$ 表示最后一个黑点为 $i$ 时的方案数,有:$f_i =\sum\limits_{j=1}^{i-1}f_j[(i-j)\bmod val_j =0]$。不难发现在使用刷表法的时候,转移代码: for(re int j=1;i+val 阅读全文
posted @ 2024-03-05 19:03 harmis_yz 阅读(58) 评论(0) 推荐(0)
摘要:分析 一眼分块。 用值域分块来维护。先把所有的值离散化,使得至于不大于 $n+q$。统计一下每个值的数量,每个块包含值的数量,每个块的价值和。修改值的时候先把原来值的数量,块包含的数量,块的价值剪掉被修改值的贡献,然后在新的值上面更新。修改数量直接改数量的变化贡献即可。 找前 $x$ 大的值之和从值 阅读全文
posted @ 2024-03-05 19:01 harmis_yz 阅读(27) 评论(0) 推荐(0)
摘要:分析 乱搞题。 $1 \le n,m \le 10^5$ 的时候就可以考虑乱搞了。 发现每次操作 $1$ 都会把上一次的操作 $1$ 覆盖掉,那么第 $i$ 个询问时树的颜色情况就是由前 $1$ 个操作 $1$ 决定。也就是说这个询问的内容变成了:在 $x$ 为根的子树中,深度不小于 $x'$ 的节 阅读全文
posted @ 2024-03-05 19:01 harmis_yz 阅读(103) 评论(0) 推荐(0)
摘要:分析 线段树。 每个节点维护两个值:$s[l\dots r]$ 和 $s[r \dots l]$。判断字串是否是回文直接就是询问的答案维护出来的两个值是否相同。 首先想到用线段树暴力维护。第一个值很显然是两个儿子的第一个值加起来,第二个值是反着加起来。得到很酷的代码: il void up(int 阅读全文
posted @ 2024-03-05 18:57 harmis_yz 阅读(62) 评论(0) 推荐(0)
摘要:分析 一眼 DP。 定义状态函数 $f_{i,j}$ 表示在第 $i$ 此比赛中,获胜者为 $j$ 时的最大奖学金。把比赛过程看成一棵倒着的满二叉树,就能发现:第 $i$ 场比赛只会是其左儿子为根的子树中叶子节点的某一个与其右儿子为根的子树中叶子节点的某一个进行比赛。然后就可以得到转移方程:$f_{ 阅读全文
posted @ 2024-03-05 18:57 harmis_yz 阅读(28) 评论(0) 推荐(0)
摘要:分析 考虑 DP。 由于 $n$ 很大,而 $m$ 可以接受,考虑根据公交车定义状态函数。很容易想到一种状态函数:$f_i$ 表示做第 $i$ 辆公交车到 $t_i$ 的方案数。根据题意,就有转移方程:$f_i=\sum f_j [s_i \le t_j \le t_i-1]+k$,$k$ 在 $s 阅读全文
posted @ 2024-03-05 18:54 harmis_yz 阅读(15) 评论(0) 推荐(0)