10 2022 档案
摘要:令 sn 表示最大公因数恰好为 n 的集合个数,fn 表示与 n 互质的数的个数。 那么我们要求的就是 ∑isifi。 考虑求出 s 和 f。 考虑计算 fi。令 ci 表示数 i 的出现次数。 则直接莫比乌斯反演: $$f_n=\sum
阅读全文
摘要:首先考虑相乘等于平方相当于两个数除去平方因子后相同。所以我们把所有数都除去平方因子,然后问的相当于是序列有多少排列满足相邻两项不等。为了更方便地 DP,我们对修改后的序列排序。 我们发现这个序列是可以被分成块的,满足每一块内数字相同。于是我们考虑每次插入好多个数而不止一个数。设第 i 块有 $s
阅读全文
摘要:所谓单调递增或单调递减,其实只用看成一条有向的链,b 大的点指向 b 小的点即可。 所以对于边 (u,v),假设 bu≠bv,那么这条边的方向确定。 一个点对答案的贡献是经过它的链数,设 x 为指向它的边的数量,y 为它指出去的边的数量,那么贡献就是 $a_i\ti
阅读全文
摘要:首先注意到如果一个颜色分配给的两个点如果不相邻的话,这种颜色就被浪费了。 所以一个颜色分配给的两个点一定是相邻的。 设 fi,0/1 表示 i 的子树内,i 还可以和父亲匹配一次 / i 已经和它的儿子匹配完了的最大价值。 设当前点为 u,先假设它的儿子都匹配完了,即给 $
阅读全文
摘要:首先,我们关注一下“相似”是什么意思:它等价于,两个字符串中 B 和 N 的数量分别相同。 显然地我们可以发现,每次操作,相当于给字符串加或减一个 B 或 N 或 BN。 把每个字符串中 B 的个数作为横坐标,N 的个数作为纵坐标,找到其对应点。 那么,每次操作,就相当于把这个点的位置往左或右或上或
阅读全文
摘要:首先,可以感性地发现移动小球时出现负值不会影响最终答案,只要最终方案是非负的就行了。 所以,我们不妨规定,一个箱子只能从右边一个箱子拿小球,或者向右边一个箱子放小球。 设 fi,j,k 表示前 i 个箱子,总共放 j 个小球,第 i 个盘子放 k 个小球的最小移动次数。 可
阅读全文
摘要:抽象成一个图论问题。无向图,无穷个点,若 x+y=2k 则有边,求 n 个特殊点中两两最短路的最大值。 可以发现这张图是一棵树。 证明:对于任意一个 i,则有唯一的 j∈[0,i−1] 满足 i+j 是 2 的次幂。考虑若存在 $0\le j_2\lt j_1\lt i
阅读全文
摘要:设 fu,0/1 表示以 u 为根的子树,u 所在的联通块内有 0/1 个黑点的方案数。 设 v 为 u 当前枚举到的儿子。 则转移方程为: fu,1=fu,1×(fv,0+fv,1)+fu,0×fv,1 $
阅读全文
摘要:首先有一个显而易见的性质:每次取都是取最大的一个数。 然后就变成了加数,取最大值,加数,取最大值。。。 ~~直接单走一个优先队列(~~ 但是很明显这个数据不打算把优先队列放过去。 发现一个数加入集合时,如果它比集合中所有数都大,那它就会马上被拿走。 所以我们单独处理这些数。 把这些数去掉以后,剩下的
阅读全文
摘要:可以将移动的数量最小化改成不移动的数量最大化。 于是预处理出 li,ri 表示 i 出现的最左/最右位置。 设 fi 表示 [i,n] 中能不移动的最大数量,cntai 表示 [i,n] 中 ai 的出现次数。 则 fi 先能继承 fi+1
阅读全文
摘要:好自闭,这种状态打个锤子 CSP。。 可以发现以下几个结论: 如果 u>v,那么一定无解。 存在一种方案,使得 u 每次加上的 v 都是 2 的次幂。因为如果 v=2a1+⋯+2ak,a1<⋯<ak,那么可以依次将 u
阅读全文
摘要:不难发现,包含关系只可能是短的路径被长的路径包含。 那么我们考虑按照路径长度从小到大,一条一条路径边加入边判断。 考虑先将树上的所有边断开,每加入一条路径的时候就将这条路径上包含的边加入,用并查集维护连通块的点数。不难发现,如果加入一条路径后,这条路径所在连通块的点数与当前加入的这条路径上的点数不同
阅读全文
摘要:首先可以发现一些有用的性质: 每个数至多操作一次 如果一个数,在原数列中有它的倍数,那么改变成那个数一定是最优的。否则可以改变成所有数的最小公倍数。 贪心的,按出现次数从小到大依次改。 对两种情况分别跑一次,取个 min。 Code: #include <bits/stdc++.h> usin
阅读全文
摘要:首先不难发现最终答案中只会出现 ci 中的数,所以可以将 ci 离散化。 设 fi,j,k 表示区间 [l,r],最小值不小于 k 的最大收益,cnti,j 表示区间穿过 i,且区间的 c≥j 的区间数量。 枚举最小的位置 p,则有转移: $
阅读全文
摘要:首先可以发现一个性质,只会在叶子节点建造塔。 发现节点 u 可以收到信号等价于以 u 作为根的时候至少有两个不同的子树内有 ≥hu 的塔。 选高度最大的点作为根,则根的子树里至少有两个子树内有高度 ≥hrt 的塔。 所以非根的节点只需要保证自己子树内有一个节点上的
阅读全文
摘要:假如某一位有奇数个 1,那么无论怎么拆分这一位都会有贡献。 那么先把这些贡献加起来,然后去除掉这些位。 发现剩下来的位都是偶数个 1,也就意味着,无论怎么拆分,拆分出来的两个数的肯定相等。 那么就是求从一些数中选出若干个数,使得它们的异或和最大。 那么这个就是可以用线性基解决的。 时间复杂度
阅读全文
摘要:考虑当左端点固定时,区间的 & 和至多有 logw 种,因为 1 的数量是单调不升的。 所以我们可以枚举区间左端点 i,然后 ST 表预处理区间 & 和 + 二分求出一段 & 和相同的区间。 然后设 prei 表示原序列的前缀异或和,那么设当前这段 & 和相同的
阅读全文
摘要:设第 i 列高 hi,建立序列 hi 的小根笛卡尔树,然后树形 DP。 发现这样就将原来不规整的图形剖分成若干个矩形: 我们发现,这样构成的若干个矩形正好对应小根笛卡尔树上的所有节点,每次递归处理的两个小联通块正是当前节点的两个儿子。根据定义,对于节点 x 代表的矩形,它的长度是
阅读全文
摘要:树形 DP 完全不会。。 首先将题目条件改一下:每个人有 x−vi 块钱,要求使所有人的钱数非负的最小操作次数。 注意到对于节点 u,在子树 u 内至多操作 sizu−1 次。 所以可以设 fi,j 表示在子树 i 内,操作 j 次,使得除节点 i 以外其余
阅读全文
摘要:先设 n=x+y+z。 首先将三元组 (a,b,c) 替换成二元组 (e=b−a,f=c−a)。即先默认所有人拿金币。 然后问题转换为在 n 个二元组中选 y 个获得 e 收益,选 z 个获得 f 收益,最大化总收益。 对于两个二元组 $(e_i,f_i),(e_j,
阅读全文
摘要:设 valu 表示树中 1 到 u 路径上的点权异或和。 那么 u 到 v 路径上的点权异或和为 0 说明 valu⊕valv⊕alca(u,v)=0。 不难发现因为值域没有限制,所以改变了点 u 的点权之后,一定不存
阅读全文
摘要:与 CF932E 其实是差不多的捏 设 p=1m,q=1−p,那么枚举第一张是王牌的次数,有如下式子: n∑i=1(ni)piqn−iik
后面那个 ik 可以展开为第二类斯特林数: $$=\sum_{i=1}^{n}
阅读全文
摘要:感觉以前遇到过类似的操作,但是还是不会( 考虑到两次相同的操作会相互抵消,并且答案与操作顺序无关,所以答案至多 2n 种,考虑预处理出来。 首先你得会分治求最大子段和,维护 lmx,rmx,mx,sum,分别表示一段区间的前缀最大子段和,后缀最大子段和,最大子段和,区间和。 于是可以 me
阅读全文
摘要:相当于一个 ai 匹配一个 bj,满足 ai≤bj,di=bj−ai,因为原序列有解,即 ∀i,ai≤bi。 如果 ai 匹配 bj 合法的话就是删去 ai 和 bj 后检查是否仍有 $\forall i,a_i
阅读全文
摘要:显然有一个性质: 我们剖成的链都是递增或递减的 如果一条链不是递增或递减的,那我们一定可以断成两条链,使得贡献不减 设 fi,0/1 表示以 i 为根的子树,划分成若干条链,其中 i 所在的那条链是从上往下递减/递增的答案。 设当前在点 u,设 $sum=\sum\limits
阅读全文
摘要:关键点在于 M≤N≤2M 的条件。 结论:在 1∼2M 中至多选出 M 个数使得它们两两不为整除关系。 证明:鸽巢原理。考虑把每个数写成 (x,y) 表示 Ai=x×2y,其中 x 是奇数,然后把这个数的 y 丢进桶 x 里,发现每个桶
阅读全文
摘要:首先显然节点 1 必选,下面就忽略节点 1 了。 之后先考虑可达性,定义 f(n) 为 n 的最小质因数。 那么 x 能到 y 当且仅当满足以下四种条件之一: x≡0(mod2) 且 y≡0(mod2) x≡1(mod2) 且 $y\
阅读全文
摘要:首先套路的,对于每个 K,求出有多少种情况的贡献 ≥K。 然后也是套路的,看到中位数,考虑把 ≥K 的数变为 1,其余变为 0。 于是只有 0,1,发现如果出现了 (a,0,0) 或 (a,1,1),那么就跟 a 没关系了。 先考虑最终答案跟 a
阅读全文
摘要:考虑答案实际就是从 T=\left{0,1,\cdots,S\right}\setminus \left{A_1,\cdots,A_N\right} 中选取若干个数并且满足以下条件: 0 和 S 一定要选。 当选的数从小到大排列时,相邻两个数的奇偶性不同。 先考虑 $\mathcal O
阅读全文
摘要:设一条路径上的权值从大到小依次为 w1,w2,⋯,wp,其中 p=n+m−1,那么它的答案是 ∑ki=1wi。 若 wi←max(0,wi−wk),那么 ∑wi+kwk 即为答案。 可以考虑暴力枚举权值 x 并令
阅读全文
摘要:先考虑对于固定的字符串 S,T,将 S 变成 T 的最小操作次数是什么。 显然 S 中 K,E,Y 内部的相对顺序都不会变,即 T 中第一个 K 是 S 中第一个 K 交换过来的,T 中第三个 E 是 S 中第三个 E 交换过来的,诸如此类。也由此
阅读全文
摘要:题意:对于每个 k=1∼n,统计满足以下要求的无序集合个数: 元素均为正整数。 恰有 k 个元素。 同一个数最多出现 m 次。 元素和为 n。 答案对 998244353 取模。 m≤n≤5000。 对于一种方案,将集合中的数从大到小排列,画出直方图。
阅读全文
摘要:考虑对于满二叉树,显然只与 dep 有关,设 fi 表示深度为 i 的答案(确切的说应该是到最深深度的距离),则有 f1=1,fi=(fi−1+1)2(i≥2)。 则对于完全二叉树,有一个很优秀的性质,对于一个节点,它的左子树和右子树至少有一个是满二叉树,所以可
阅读全文
摘要:首先 1,3 条件很好满足,但是 2 有点麻烦,考虑容斥掉条件 2。 令全集 E=\left{(i,j)|1\le i\lt j\le N,i\inℤ,j\inℤ\right}。 对于 S⊆E,令 f(S) 表示以下的值: 考虑一张有 N 个点的无向图,
阅读全文
摘要:E: 当他执行了 m×n 次操作,我们称他执行了 m 轮操作。 显然我们可以二分出最早在第几轮的时候吃掉的苹果不小于 k。 时间复杂度 O(nlogk)。 Code F: 显然可以枚举四种情况:不用机场和码头/只用机场/只用码头/机场码头都用。 如果
阅读全文
摘要:F: 我的做法比较繁琐,我维护的是白色点的权值和减去黑色点的权值和,还要求出整个矩阵的和。 可以参考一下,Code。 翻了翻题解,似乎大部分人的做法都是求出询问矩阵第一行和第二行白色点的权值和,然后直接等差数列就好了,这种做法较为简洁,可以看这个。 G: 首先很显然想到背包,每个物品的体积为 $d_
阅读全文
摘要:不会 *1800 DP/wx 考虑预处理出数组 vali,j 表示第 i 天翘 j 节课所能节约的最大时间。这个很简单,由于我们翘课只有从两边翘才可达到最优,那我们对于一个确定的 j,可以分别枚举左右两边翘课的数量,就行了。 然后跑分组背包就行了。 假设 n,m,k 同阶,
阅读全文
摘要:为了让我们构造出来的结果尽量大而又不超过给定的 s,当我们构造的串长度跟 s 相同时,就可以知道存在一个 k 满足我们构造出来的串前 k−1 位和 s 一样,第 k 位比 sk 小,然后后面 k+1 到 n 位能使串满足定义又尽量大。 所以我们从高位到低位枚举那
阅读全文
摘要:设 fi,j,k 表示在串 F(i) 的子序列中,s 中区间 [j,k] 作为子串的出现次数之和。 则有两种转移:一种是子序列完全包含在 F(i−1) 或 F(i−2) 中,一种是子序列跨越两端。 先讨论后一种情况:$f_{i,j,k}=\sum\limits_{l=j
阅读全文
摘要:首先判掉 (n−m)mod(k−1)≠0 的情况,显然是无解的。 考虑消去的最后一步,必然是以 b 中的某一元素为中位数进行的。 于是得到了一个必要条件:存在一个 bi,满足 a 中 bi 的两侧都至少有 k−12 个不在 b 中的数。
阅读全文
摘要:首先将所有 ai←ai−i。 设 fi,0/1 表示前 i 个数字,强制选第 i 个数,未删过数字/已经删过数字的最长不下降子序列的长度。 则有 f_{i,0}=\max\limits_{a_j\le a_i}\left{f_{j,0}\right}+1,$f
阅读全文
摘要:第一问非常经典,构造 bi=ai−i,那么答案就是 n− b 的最长不下降子序列的长度。 考虑第二问,设 fi 表示以 i 结尾的最长不下降子序列的长度,prei 是能转移到 i 的集合,即 ∀j∈prei,fi=fj+1 且 $b
阅读全文
摘要:直接计算有多少对守卫被保护比较困难,可以计算有多少对守卫是没有被保护的。(只用考虑都没拿盾牌的就好了) 设有 t 个守卫拿着盾牌,初始状态为 a1⋯n。 这相当于在一个 01 串 s 中填写 t 个 1,将 s 中的 0 分成 t+1 个部分,设
阅读全文
摘要:已经强大到不会做 div2C 了,不愧是我 C1 的 DP 做法如果想继承到 C2 来需要用个线段树维护,非常麻烦。 但是 C1 还有个做法。 结论:设 an+1=0,则答案为 n∑i=1max(0,ai−ai+1)。 证明的话考虑下面这张
阅读全文
摘要:首先观察最长几乎上升序列有什么性质。 发现可以从这样的序列中提取出一个非严格单调递增子序列,并且该子序列中任意两个相邻的数之间可以至多插入一个比它们两个都大的数。 这样就可以 DP 了。 设 fi 表示以第 i 个结尾,强制选第 i 个所能得到的最长几乎上升序列的长度。 则 $f_i=
阅读全文
摘要:E 恶心,差分维护三段函数,细节有点恶心 具体细节看代码。 Code F 简单贪心 Code G 设 Pi,j 为字符串 i 字典序比字符串 j 小的概率,有如下几条结论: 若 sj 是 si 的前缀,那么 Pi,j=0。 若 si 是 sj 的前
阅读全文
摘要:首先题目中每条边权值互不相同,于是 A1 的结论依旧适用:有解当且仅当树中不存在度数为 2 的点。 必要性很好证,度数为二的点不会是叶子,那么每条经过该点修改的路径一定同时经过该点的两条边,所以这两条边增减一致,但初始权值不同,显然无解。 充分性通过如下构造说明。 现在树中任意一非叶子节点至少度
阅读全文
摘要:又一次错过了单杀 *2500 的机会,不知道该说什么了。。 先把 a 排序,不会影响答案。 考虑枚举答案 v,计算有多少种选择子序列的方法使得答案为 v。 这不太好做,考虑放宽限制,计算有多少种选择子序列的方法使得答案不小于 v,最后把方案数加起来就好了。 设 fi,j 表
阅读全文
摘要:首先和 F1 一样,操作 2,3 依旧没有意义。 但是 F1 中至多使用一次操作 4 的结论到这里不成立了。 但是依旧可以发现一些有用的性质。 对于操作 4,会有 4 个格子的 a 发生改变,且这 4 个格子形如 (x,y),(n,y),(x,m),(n,m)。记这样的操
阅读全文
摘要:首先操作是可逆的,因此问题可以转化成给定一个局面,要将这个局面全部变为白色格子所花费的最小代价。 关键性质:只有操作 1 和操作 4 是有用的。 证明: 对于操作 2,翻转一个以 (n,1) 为左下角,(x,y) 为右上角的矩阵,可以转化为使用两次操作 1,第一次翻转以 $(
阅读全文
摘要:和 CF1188D 是差不多的。 设 fi,j 表示前 i−1 位,有 j 个数对第 i 位进了位时的最大答案。 进位的一定是后 i−1 位最大的一些数,直接利用上一次的排序结果再在前面添加一个数进行对一段后缀排序。 转移就枚举 A 当前这一位填什么。 具体细节看代码(
阅读全文
摘要:首先有一个比较明显的性质,直径最多经过两条边。 设全局最小值为 m。考虑从任意一点出发,经过全局最小值所在的点,然后再到任意点,花费是 2×m 的。而任意边权 ≥m,走两条后的权值必定 ≥2×m。所以最多就是花费 2×m 走两条
阅读全文
摘要:首先先将所有元素离散化。 设 m=∑ki,因为 n,m 同阶,所以下文均用 n 来表示。 考虑根号分治。 对于元素个数超过 √n 的序列,不难发现这样的序列至多只有 √n 个。对于每个序列,把它的元素存进桶中,然后枚举其它所有的序列来判断。这部分时间
阅读全文
摘要:*1900 不会做了。。 考虑将所有数从小到大排序后顺次插入,用并查集维护。 需要维护以下几个东西:区间的总数量,最长区间的长度,最长区间的个数。 当最长区间的个数等于区间的总数量时,更新答案。 具体细节看代码。 Code: #include <bits/stdc++.h> using namesp
阅读全文
摘要:这咋想到网络流的啊。。 由最大值最小想到二分最大值,将求解转化为判定。 然后假设当前 check 的值为 x,从源点向每个点连一条容量为 x 的边,表示这个点至多送出 x 个礼物。 然后把每个关系也看成一个点,假设当前是第 i 条关系 (ai,bi),那么 ai 和 $
阅读全文
摘要:考虑建出原树的点 Kruskal 重构树,也就是每次取出连通块的最值作为根,然后删去根裂成若干个连通块,递归构造这些连通块,最后在新图中将这些连通块的根与整个连通块的根连边。 容易发现,这样建出的新树满足 a,b 在原树上的链上最值等于新树上的 lca(a,b)。 于是建出最小
阅读全文
摘要:用 map 暴力维护每段,如果不小于前一段就把这段直接删了,否则往后暴力删段直到某段小于这一段。每次输出 map 的大小即可。 因为总共至多新建 n+m 个段,所以均摊复杂度 O(logn)。 具体细节看代码。 Code: #include <bits/stdc++.h
阅读全文
摘要:自闭了,*1800 都不会了。。 先连所有边权不大于 k 的边,若图能连通,直接找一条边权与 k 最接近的改一下就好了。 否则跑一遍 Kruskal。 具体细节看代码。 Code: #include <bits/stdc++.h> using namespace std; typedef l
阅读全文
摘要:已经是啥也不会了呜呜呜 考虑这个 A=A+B,B=A+B 是可以表达成矩阵形式的。 $\begin{bmatrix} a&b \end{bmatrix}\begin{bmatrix}1&0\1&1\end{bmatrix}=\begin{bmatrix} a+b&b \end{bmatrix
阅读全文
摘要:比较巧妙的题 注意到题目要求是取恰好 k 个物品能搜出所有的权值和,这比较麻烦。(直接完全背包的话连样例都过不了) 参考样例找找原因: 3 2 1 2 3 完全背包求出 f3=1,即凑出 3 所需最小物品数量是 1,但是它也是可以被两个物品凑出的,所以应该被输出。 那么有没有办法把
阅读全文
摘要:发现字符串啥也不会。。 设原串为 s,nxti,j 表示从 i 开始沿着 fail 树向上跳的到的最大位置 k 满足 sk+1=j,若不存在则为 0。 注意到 KMP 求前缀函数其实也是跳 fail 树的过程:对于 i,从 faili−1 开始沿着
阅读全文
摘要:考虑我们的决策肯定是先按 Bi 大小在几个州赢得协作者,然后再在剩下的几个州里赢得选票。 下文记 S 为赢得协作者的州的集合,T 为赢得选票的州的集合。 按 Bi 从小到大排序后,对于一个前缀 i 来说,如果 i 是编号最大的赢得协作者的州,那么对于每个 j(j<i)
阅读全文
摘要:PA 2021 部分题解 「PA 2021」Oranżada 无解条件显然,若 ai 的种类数小于 k,那么输出 −1。 否则贪心的取前 k 个不同的 ai 就好了。 具体细节看代码。 Code 「PA 2021」Od deski do deski 先考虑对于一个固定的序列,
阅读全文
摘要:CF1420D: 注意到任意条线段的交集如果非空的话必定是一条线段,且这条线段的左端点一定是某条线段的左端点。 很明显先将线段离散化,然后去枚举相交的线段的左端点。 我们设 p 是覆盖了某个位置的线段的数量,s 是以这个位置为左端点的线段数量。由于我们选出的这 k 条线段中至少要有一条以
阅读全文
摘要:被 *1900 薄纱啦,菜死了www 假设最终答案不小于 x。如果一个节点上的操作是取 min,那么它的每个儿子节点的值都需要不小于 x。否则它至少有一个儿子节点的值不小于 x。 按照上面的操作,如果我们到达了一个叶子节点,那么就需要填一个不小于 x 的值。我们只需要找到一种方
阅读全文
摘要:先考虑最大的点,这个点一定能够说服所有的村庄。而别的村庄为了能够说服这个最大的村庄,必须要先通过说服别的村庄来达到目的。 先把这个最大的村庄删掉,剩下的图就会分成若干个连通块。显然如果一个村庄能够说服图中所有的村庄,那么必然能先说服自己属于的连通块的村庄。并且能够说服这个最大的村庄,就能够说服整张图
阅读全文
摘要:如果是从左往右跳,不好决策。 不妨从右往左跳。 注意到能跳到的位置一定是一段连续的区间,所以每次跳到 l 最小的位置就可以了。 预处理后直接倍增跳,时间复杂度为 O((n+q)logn)。 具体细节看代码。 Code: #include <bits/stdc++.h>
阅读全文
摘要:COCI 2021-2022 #6 题解 T1: 简单模拟 T2: 枚举子矩阵的第一行和最后一行,按列双指针。 预处理每列的前缀和,时间复杂度为 O(n3)。 Code: #include <bits/stdc++.h> using namespace std; typede
阅读全文
摘要:很厉害的题啊,不会做www 有一种很简洁的 Hash 做法捏。 先放宽要求,考虑出现的次数都是 3 的倍数。 维护 cnti,j 表示前 i 个数,j 出现次数模 3 的值。 那么区间 [l,r] 符合要求当且仅当 cntl−1=cntr,哈希即可。 那么原
阅读全文
摘要:COCI 2021-2022 #5 题解 T1: 简单模拟,贴个较为简洁的代码 Code: #include <bits/stdc++.h> using namespace std; const int N = 1005; int T; int n; char s[N]; int cnt[26];
阅读全文
摘要:COCI 2021-2022 #4 题解 T1 简单贪心。 T2 设 fk,u,v 表示从 u 走至多 k 条边到达 v 的最短路。 可以直接 Floyd O(n4) 也可以上一个矩阵快速幂优化变成 O(n3logn)。 Fl
阅读全文
摘要:以下标为横坐标,值为纵坐标,建立坐标系。 然后会发现每个点的后继在其右上方。 按照每个点 LIS 大小来分层,以样例 3 为例: 注意到同层之间一定满足 x 递增 y 递减。 结论:存在一种选择 LIS 的最优方案,满足每个 LIS 在图上不交叉。 如样例 3 选的两组 LIS 就是
阅读全文
摘要:首先对于一棵子树,肯定是放在这棵子树中深度最小的叶节点。 那如何分析子树中深度最小的叶节点深度够不够小呢? 我们看到,我们关注叶节点深度是为了看它能不能在 Bessie 从根节点到达该子树的根之前(或同时)到达子树的根。 也就是说,最浅叶节点 到 子树根 的距离应该小于等于 树根 到 子树根 的距离
阅读全文
摘要:给定正整数 n,k,对于一个长为 n 的序列 \left{a_i\right},我们称其是好的当且仅当: ∀i,1≤i≤n,均满足 0≤ai≤i。 ∀v=1,2,⋯,n,至多有一个下标 i 满足 $a_i=v
阅读全文
摘要:首先对边排序,然后从小到大依次加入每条边。 考虑只有当前存在的边时,答案怎么求。 假设此时加入的边的 d 值为 t,首先要求的是经过恰好 t 条边时可以到达哪些点。 这个可以从加入上一条边时的答案递推过来,这个递推式可以矩阵加速。 求出恰好 t 条边时可以到达哪些点后,对整个图进行一
阅读全文
摘要:麻了,属实是被 *2100 拿捏了 如果把 x 看成左指针,y 看成右指针,那么到新的点 |xpi−xpi−1| 相当于左指针挪动,|ypi−ypi−1| 相当于右指针挪动。 所以这是莫队啊!!! 按
阅读全文
摘要:设这个序列为 a。注意到连续操作 [i,i] 两次所形成的序列要么是 a,要么是除了 ai 都翻转的序列。我们可以多随几次,总能碰到第二种情况,然后就能知道第 i 个数是 0 还是 1 了,然后再还原回去。当然有一个问题就是除开 ai 以外剩下的 01 数量相
阅读全文
摘要:首先把所有线段按左端点升序,左端点相同按右端点升序排序。发现如果一个线段完全被另一个线段包含,那把它去掉也没有影响。于是我们先去掉这种线段,然后进行 DP 。设 fi,j 表示前 i 个区间删去 j 个,且钦定第 i 个区间不删除的最大覆盖点数。那么 $f_{i,j}=\max
阅读全文
摘要:连续段 DP: 在一些数排列的问题中,往往会遇到感觉是 DP 但是状态都列不来的情况,而连续段 DP 就是一个解决排列计数的利器。 具体思路是依次插入每个元素(通常是排序后从小到大/从大到小)。考虑当前元素插入到哪个位置,这样的话状态就需要记下当前插到了哪个数以及当前连续段个数。 转移时考虑:当前元
阅读全文
摘要:介绍一些神奇的性质题 CF1689E: 给定一张 n 个点构成的图,每个点有一个非负整数的权值 a1,a2,⋯,an。 i,j 有边当且仅当 a_i&a_j\gt0。 每次可以进行以下两种操作之一: 选择一个元素 ai 并将它加 1 选择一个元素 ai
阅读全文
摘要:CF1144G: 给定一个长度为 n 的序列 A。 问能否把它拆成一个严格递增序列和一个严格递减序列(可以为空),如果有解则输出方案。 n≤2×105。 设 fi,0 表示把序列的前 i 个数拆成递增序列和一个递减序列(可以为空),并且 Ai 属于
阅读全文