当前位置: 首页 > news >正文

代码源2025长训

10/9 Day 16

A:非常可惜写的35pts暴力全部没分,也是神人了。首先需要一个小分讨,如果原树有双重心那么就会有如下情况:该边后的双重心不变和有可能改变;如果不变的情况就是说,对于双重心 \((u,v)\) ,我们加减边的总共4个点一定在 \(u,v\) 两个子树中的同一子树内,那么我们枚举断开的边 \(i\),连边的可能性就是子树 \(i\) 中任意一点到子树外的任意一点,这些贡献全部加到原双重心上;对于有可能改变双重心的情况就是,我们一定会断开原来连接双重心的那条边,然后将 \(u\) 子树中任意一点连接到 \(v\) 子树中任意一点,这样每个点都有 \(n/2\) 的贡献。对于判断双重心我们就以任意点为根,如果有 \(size_u=\frac{n}{2}\),那么点 \(u,fa_u\) 为双重心。

我们已经通过上面得知了成为双重心的条件,考虑如何满足它;也即我们要如何使得 \(size_u=\frac{n}{2}\)。考虑两种情况,\(size_u>\frac{n}{2}\) 和反过来;如果 \(size_u>\frac{n}{2}\) 那么我们需要将子树 \(u\) 内的一个满足 \(siz_v=siz_u-\frac{n}{2}\) 的点 \(v\) 移到子树 \(u\) 外去;如果 \(size_u<\frac{n}{2}\) 那么我们就需要找到子树外的一个点使得以 \(u\) 为跟时该点的子树大小为 \(\frac{n}{2}\) 并接到 \(u\) 的子树内,也即 \(new\_size_v=\frac{n}{2}-siz_u\)

考虑实现;对于第一种情况我们维护一个全局的桶 \(b\) 并进行 dfs,发现一个点一定会比它子树内的点都早遍历到而且会比它子树内的点晚回溯,那么我们分别维护 dfs 进入 \(u\) 时和向上回溯时的 \(b_{siz_u-\frac{n}{2}}\),将这两者相减即可得到其子树内的值。最后给答案乘上系数 \((size_{x}-\frac n2)(n-size_{x})\)

对于第二种情况就比较困难,首先我们考虑在 \(u\) 子树外的情况分两种,点 \(v\)\(root\to u\) 的路径上和不在路径上,若 \(v\) 不在路径上那么新的子树大小还是 \(siz_v\),如果在链上那就是 \(size_v-size_{son\_to\_u}\)。考虑具体如何实现,对于不在 \(u\) 上的 \(size\) 我们使用一个桶 \(ball\) 记录所有点的 \(siz\),然后拿这个减去我们维护的 \(b\) 对应的子树 \(u\) 内的值,这样我们还需减去所有在链上的点的 \(size\),我们继续维护一个全局桶,在 dfs 遍历到点 \(u\) 的时候这个桶维护的内容就是 \(root\to u\) 的链上不包括 \(u\) 的点的子树大小信息,这样向下递归的时候就加上 \(u\) 的子树大小,回溯时减去其父亲的子树大小即可;我们还剩下在链上的点的 \(new\_size\),同样可以使用求链上 \(siz\) 的办法,不过递归时不需要加上点本身的信息而需要 \(n-size_v\)。最后给答案乘上系数 \((size_{x}-\frac n2)(n-size_{x})\)

细节我们是在枚举 \(u\) 并统计贡献,但答案其实同时给 \(u,fa_u\) 造成贡献。

B:不是很可以补,只做了原题弱化版 https://atcoder.jp/contests/arc164/tasks/arc164_e.

10/11 Day 17 (Div 2)

A:发现任何一个存在众数的区间一定有一个形如 \(\{a,b,a\}\)\(\{a,a\}\) 的子串,那么我们只要枚举所有这样的字串即可。我们覆盖这样的一个子串的前提一定是这个字串之前的最大值 \(>a\),或者是 \(b>a\) 或是形如 \(\{a,a\}\)。如果该子串前的最大值 \(>a\) 那么每一次覆盖我们就往前直到最靠前的 \(>a\) 的值,往后我们就覆盖到最早的值 \(<a\) 的位置之前一个位置;如果不是子串前的最大值 \(>a\) 那么我们往前直到最近的一个 \(<a\) 的位置的(不包括),往后直到最近的一个 \(<a\) 的位置(不包括)。直接用线段树维护即可。

B:先考虑如果想让区间 \([l,r]\) 全亮并且 \(l-1,r+1\) 不亮是否可能,我们找到 \(mid=\frac{l+r}{2}\) 的左右两边最近的灯塔(如果不是左右两边都有则不可行),判断这两个灯塔中间的距离是否不超过左灯塔和左边界的距离 \(+\) 右灯塔和右边界的距离,这样必定能覆盖满。

考虑 dp,\(f_i\) 表示点 \(i\) 不亮(没被覆盖),前缀 \([1,i]\) 的可能情况之和。转移时考虑分两种;第一种前缀 \([1,i-1]\) 都亮,直接判断即可;第二种枚举 \(j\) 表示左边最近的不亮的位置,判断 \([j+1,i-1]\) 全亮是否可能,加上贡献即可。

统计答案时枚举每个点作为最后一个不亮的位置,判断 \([i+1,n]\) 全亮是否可行并加上贡献即可。

C:很神奇的题,将 \(a\) 加入 0-1trie,并 dp 求解 \(f_{u,k}\) 在字典树上某一个点的子树中在 \(s\) 任意的情况下第 \(k\) 小的值的最小值,转移直接从子树转移即可,这部分复杂度是 \(O(\sum cnt_u)\),其中的 \(cnt_u\) 是其子树中的数的数量;由于每加入一个数,就会对一条长度为 \(\log W\) 的路径产生 \(1\) 的贡献,所以复杂度为 \(O(n\log W)\) 的;或者可以像线段树一样理解每一层的点数都是 \(O(n)\) 的,共 \(O(\log W)\) 层。

对于询问我们可以考虑,我们将 \(l,r\) 转成二进制后,我们直接根据两者高位上相同的部分在字典树上跑,因为这一段的值一定是固定的。对于剩下的不同的值我们就可以使用类似带上下界的数位 dp 的办法求解,因为如果我们跑到了字典树上某一个点并且此时没有上下界限制我们就可以直接使用 \(f_{u,k}\) 的值。

http://www.hskmm.com/?act=detail&tid=29639

相关文章:

  • 代码源国庆模拟赛
  • CSP-S模拟30 2025.10.12
  • 记录fiddler抓包mumu模拟器
  • 神经网络读书报告
  • 机器学习初识
  • MinIO 介绍(2)--MinIO 客户端 mc 基本功能
  • 深度学习初识
  • 关于UE5基础关卡创建的注意点
  • 2025年10月恒温恒湿系统厂家最新推荐榜单,精加工车间/厂房/美术馆/仓库/计算机房/档案室/工业/工厂车间恒温恒湿空调系统公司推荐
  • 征集歌单
  • Hello world
  • ABC427 游记
  • 乐理 -02调式
  • Python 基于python实现的图片压缩助手
  • ElasticSearch
  • 20232302 2025-2026-1《网络与系统攻防技术》实验一实验报告
  • 2023 ICPC ECfinal J
  • 嵌入式十六进制的地址转换成十进制MB单位
  • 20232318 2025-2026-1 《网络与系统攻防技术》 实验一实验报告
  • 实时Galgame - 动漫角色 语言生成+图片生成
  • 系统响应慢分析案例
  • Linux文件系统与磁盘工作原理
  • 平安好车主小程序 充电站、加油站列表vmp+wasm逆向
  • Linux文件系统的实验
  • 软中断softirq的CPU使用率升高
  • CPU多进程切换导致过载-CPU上下文切换
  • Vue3 之pinia状态管理
  • 乐理 -01识谱
  • shader func
  • 案例分析-DDOS攻击、网络延迟(延迟确认纳格算法)、NAT延迟