CF1827

A. Counting Orders

简单计数。

两个都排序,双指针维护一下 a[i]b[p] 的位置(a[i] <= b[p])。

那么方案数 \(\times (p - i)\)。

提交:https://codeforces.com/contest/1827/submission/211387552

C. Palindrome Partition

回文好题。

考虑利用 Manacher 求出每一个偶数的回文串。

参考:算法学习笔记(13): Manacher算法 - jeefy - 博客园

观察可以发现:每一个合法的串都可以被划分为多个最小的合法串,并且划分方法是唯一的。

所以考虑如下:

我们需要维护出每一个点作为右端点,最靠近的左端点。

这等价于求出满足 \(i + p[i] \ge x\),求 \(\max i\)。

然后,设上面对于端点 \(i\) 求出来的结果为 \(g_i\)。

得出最终的递推式:

\[f_i = \begin{cases}
0 &,g_i = 0 \\
f_{i - g_i} + 1 &, g_i \ne 0
\end{cases}
\]

其中 \(f_i\) 表示以 \(i\) 结尾的合法的串的个数。

最终的答案为 \(\sum f_i\)。

提交:Submission #211396680 - Codeforces

D. Two Centroids

性质好题。

重心有如下性质:

  • 最大子树大小 \(\le \lfloor \frac n2 \rfloor\)。

  • 新增一个叶子节点,重心最多变化一条边。

  • 重心至多有两个。

那么我们考虑每次加入一个点对于原来重心 \(c\) 的影响,并设当前最小的子树大小为 \(mx\)。

  • 如果加入的叶子节点在 \(c\) 的子树 \(t\) 内。更新 \(t\) 的大小,并更新 \(mx\)。如果此时 \(mx \ge \lfloor \frac n2 \rfloor + 1\),那么重心向 \(t\) 移动。并且此时 \(mx\) 更新为 \(\lfloor \frac n2 \rfloor\)(不考虑,把图画出来就明白了。

  • 由于我们不可能动态维护以每一个重心为根,所以还要考虑其祖先的情况(同理)。

然后就是如何找 \(t\) 的问题。有两种解决方案:

  • 无论如何首先可以通过 dfn 序判断是否在其子树内。

    • 方案1:利用倍增的方法跳祖先。空间复杂度 \(O(n \log n)\),单次 \(O(\log n)\)。

    • 方案2:利用 dfn 区间,对于每一个节点保存其子节点的 dfn,每次二分找到叶子的 dfn 所在的区间即可。(我用的这种方法)空间 \(O(n)\),单词 \(O(\log n)\)。

  • 实测第二种要快一点点(也快不了多少,主要是常数够好)

提交:Submission #211401150 - Codeforces

E. Bus Routes

差点没用 dlang 卡过去

思路1

考虑更严的限制(等价):叶子节点间两两可以在两次内到达。

于是考虑对于每一个叶节点,求出其能到达的最高的祖先 \(high(x)\)。

也就是求一个 LCA 即可。

那么满足条件的必要条件是每一对 \(high(x), high(y)\) 满足祖先/子节点关系。

如果不是,那么至少需要三条路径。

如果满足上述条件,那么所有的 \(high\) 满足在一条链上。

那么可以通过 dfn 序判断。

这并不充分。

考虑找到最低那个 \(high(x)\),并以 \(high(x)\) 作为根。

此时重新求一次 \(high\),如果所有的 \(high\) 都为 \(high(x)\),那么就是 \(ok\) 的,否则,如果有 \(high(y) \ne high(x)\),那么 \(x, y\) 不可达。

不要写倍增求 LCA,利用 ST表 \(O(n \log n) \sim O(1)\) 或者 树链剖分 \(O(n) \sim O(\log n)\) ,甚至是离线 \(O(n)\) 求。倍增太慢了,dlang 卡不过去。

思路2

参考 Alex_Wei 的博客:https://www.luogu.com.cn/blog/_post/575397

利用 DSU on tree

思路3

维护虚树并树上差分。非常的高效。

参考:CF1827E Bus Routes - Kubic 的博客 - 洛谷博客

随机推荐

  1. 深入浅出eBPF|你要了解的7个核心问题

    简介: 过去一年,ARMS基于eBPF技术打造了Kubernetes监控,提供多语言无侵入的应用性能,系统性能,网络性能观测能力,验证了eBPF技术的有效性.eBPF技术和生态发展很好,未来前景广大, ...

  2. 阿里巴巴云数据仓库 MaxCompute 数据安全最佳实践

    ​简介:MaxCompute作为企业级SaaS模式云数据仓库,正在为客户业务及其数据提供持续的安全保护. MaxCompute 近期对产品的安全能力进行了全面升级 ,结合数据生命周期,针对数据误用.数 ...

  3. [GPT] 如何配置抓包工具以解密HTTPS流量才能看到明文的域名地址

    要配置抓包工具以解密HTTPS流量,您需要执行以下步骤: 1. 安装抓包工具:首先,确保您已经安装了支持HTTPS解密的抓包工具,例如Wireshark. 2. 获取SSL证书:抓包工具需要使用目标网 ...

  4. [Go] 结构体成员的第三个位置上标签的作用

    结构体成员加了第三个位置的标签,在转换指定类型时,key 会使用指定的名字. package main import ( "encoding/json" "log&quo ...

  5. dotnet 8 破坏性改动 在 AssemblyInformationalVersionAttribute 添加上 git 的 commit 号

    我在一个 WPF 项目里面,在界面显示应用的版本号,更新到 dotnet 8 的 SDK 之后,发现我的界面布局损坏了.本质上这个破坏性改动和 WPF 没有什么关系,是 dotnet 的 SDK 或编 ...

  6. WPF 已知问题 清空 CollectionView 的 SortDescriptions 可能抛出空异常

    本文记录一个 WPF 的已知问题,在通过 CollectionViewSource 获取到 CollectionView 之后,如果 CollectionViewSource 对象已被 GC 回收,将 ...

  7. 12.prometheus监控之Domain域名过期监控

    一.域名过期时间监控 域名的监控通过domain_exporter来完成 domain_exporter:https://github.com/caarlos0/domain_exporter/rel ...

  8. RT-Thread 堆区大小设置

    一.利用栈区的空间作为堆区 看过我之前的笔记的小伙伴都知道,以前我是通过申请栈区的空间使用的,感兴趣的小伙伴可以看我之前的笔记,RT-Thread移植到stm32. 在board.c文件文件中的代码如 ...

  9. Solution Set - LCT

    A[洛谷P3690]维护一个森林,支持询问路径xor和,连边(已连通则忽略),删边(无边则忽略),改变点权. B[洛谷P3203]\(n\)个装置编号为\(0,...,n-1\),从\(i\)可以一步 ...

  10. ITIL4 服务价值系统(SVS):一场服务管理的革新之旅

    在这个数字化时代,每一家企业都在追求高效的服务管理和卓越的客户体验.今天,我们就来聊一聊ITIL4中的服务价值系统(Service Value System, SVS)--一个让服务管理变得更加直观和 ...