AGC008 部分简要题解
F
不妨前考虑 \(70 \%\) 的部分分,\(s\) 全部为 \(1\)。
首先可以发现这个问题之所以困难是因为同一个联通子树可能可以被多个中心节点导出。
因此,我们考虑对于一个合法的联通子树,在 一个 特殊的节点上将其统计,这样可以不重不漏的计算。
为了方便我们令 \(f(x, d)\) 为以 \(x\) 为染色中心距离其不超过 \(d\) 的点构成点集。
考虑什么时候两个点会重复统计,不难得到如下观察:
- 若 \(f(x, d) \ne \{1, 2, \cdots n\}\) 则对于任意不同的 \(d\) 其 \(f\) 所对点集不同。
证明很显然。
因此,以下我们仅考虑不为全集的联通子树,显然全集是一定合法的。
- 若 \(f(x, d_1) = f(y, d_2)\) 那么一定有靠 \(x\) 一边的子树全部被染黑或靠 \(y\) 一边的子树全部被染黑。
若两边不存在一个子树全部被染黑,令 \(k = dist(x, y) > 0\) 则有:\(d_1 = d_2 + k, d_2 = d_1 + k\),矛盾。
- 若 \(f(x, d_1) = f(y, d_2)\) 那么 \(x, y\) 构成的链上一定存在且恰好存在一个点使得其挂在链上的子树内存在点没有被染黑。
反证法,我们可以找到最靠近 \(x\) 子树内没有被全部染黑的点 \(u\) 和最靠近 \(y\) 子树内没有被全部染黑的点 \(v\)。
令 \(k_1 = dist(x, u), k_2 = dist(y, v)\),则 \(u\) 子树内一定恰好是深度不超过 \(d_1 - k_1\) 的节点被染黑,\(v\) 子树内类似为 \(d_2 - k_2\) 的节点被染黑。
同时据此我们也可推出 \(u\) 子树内一定是被不超过 \(d_2 - k_2 - dist(u, v)\) 的节点被染黑,因为 \(u\) 子树内没有被全部染黑,所以深度不超过 \(d_1 - k_1\) 的点构成集合和深度不超过 \(d_2 - k_2 - dist(u, v)(dist(u, v) > 0)\) 构成集合一定不同,矛盾。
唯一性:若不存在则所有点被染黑,与一开始的假设不符。
推论:若 \(x, y\) 在树上相邻,那么一定恰好存在一个点子树内全部被染黑,一个没有全部被染黑。
若 \(f(x, d_1) = f(y, d_2)\),则 \(x, y\) 路径上的每个点 \(u\) 都唯一存在一个 \(d'\) 使得 \(f(x, d_1) = f(u, d') = f(y, d_2)\)
若存在,唯一性由观察一可以保证。
对于存在性,根据观察二,我们不妨令 \(x\) 这边的子树全部被染黑,根据 \(y\) 这边的子树是否被染黑进行讨论。若 \(y\) 这边的子树没有被全部染黑,则 \(x, y\) 路径上所有点(除了 \(y\))子树内全被染黑,则考虑链上距离 \(x\) 最近的点 \(u\)。
令 \(k = dist(x, y)\),有 \(f(u, d_2 + k - 1)\) 一定覆盖 \(f(y, d_2)\) 中除了 \(x\) 所在的子树内的点。
于此同时,\(f(u, d_2 + k - 1)\) 一定覆盖了 \(x\) 子树内距离其不超过 \(d_2 + k - 2\) 的点。
我们知道 \(f(y, d_2)\) 中仅包含距离 \(x \ \ d_2 - k\) 的点,当 \(k \ge 1\) 时恒有 \(k - 2 \ge -k\)。若 \(y\) 这边的子树全部被染黑,令 \(u\) 为 \(x, y\) 路径上存在的唯一一个没有被全部染黑的节点。
则有 \(d_1 - dist(x, u) = d_2 - dist(y, u)\),考虑证 \(f(x, d_1) = f(u, d_1 - dist(x, u)) = f(y, d_2)\)。
同时有 \(\forall v \in u \to y, maxdep(v) \le d_1 - dist(x, v) = d_1 - dist(x, u) - dist(u, v)\),因此 \(f(u, d_1 - dist(x, u))\) 能覆盖 \(\forall v \in u \to y\)。
同理可证另一边,此时有 \((x, u), (u, y)\) 为第一种情况,即可证明所有情况。
- 推论 \(1\):\(\forall S\) 满足 \(S\) 合法,那么合法的染色中心一定构成一颗联通子树。
- 推论 \(2\):\(\forall S\) 满足 \(S\) 合法,\(S\) 合法的染色中心形成的联通子树 \(T\) 一定满足 \((u, v) \in T\) 且 \(f(u, d) = S\),\(u\) 一侧子树内没有被全部染黑,\(v\) 一侧子树被全部染黑,则一定有 \(f(u, d) = f(v, d + 1)\)(根据观察四的证明易证)。
- 推论 \(3\):\(\forall S\) 满足 \(S\) 合法,\(S\) 合法的染色中心形成的联通子树 \(T\) 一定满足存在且唯一存在 \(u \in T\) 使得 \(f(u, d) = S\) 且以 \(u\) 为根,\(\forall v \in T, f(u, d) = f(v, d + dist(u, d))\)(根据推论 \(2\) 易证)
因此,我们考虑在 \(S\) 的染色中心形成的联通子树 \(T\) 中 \(u \in T\) 且 \(f(u, d) = S\) 最小的 \(d\) 上统计 \(S\)。
因此,\(u\) 向外扩展半径为 \(d\) 的联通子树能统计当且仅当:
- \(d < f_u\) 其中 \(f_u\) 为距离 \(u\) 最远点的距离。
- 根据推论 \(2\),\(u\) 不存在一个子树使得删除这个子树后其他点全被染黑,即 \(d - 2 < g_u\)(\(g_u\) 为 \(u\) 往外和 \(f_u\) 所在点不在同一个子树的最远点 \(v\) 的距离)。
因此我们考虑换根求出 \(f, g\),即可 \(\mathcal{O}(n)\) 计算答案。
考虑回到 \(s\) 中存在 \(0\) 的情况,我们还是考虑将所有合法的联通子树 \(S\) 在将所有点均看作合法情况下应该统计的点统计。
容易发现现在合法的 \(S\) 是部分分的子集,因此只需要将每个点的贡献考虑进关键点的影响即可。
因此 \(\forall u, d \in [0, \min(g_u + 1, f_u - 1)]\) 的每个 \(d\),合法当且仅当 \(f(u, d)\) 的染色中心联通子树内至少存在一个合法点。
若 \(u\) 为关键点,显然所有的 \(d\) 均合法。
否则,考虑将整棵树以 \(u\) 为根,根据推论二当且仅当存在一个子树内的点全部被染黑且存在关键点。
于是我们令 \(h_u = \min\limits_{u \to v,\exists x \in S_v, s_x = 1} q_v\)(其中 \(q_v\) 为以 \(u\) 为根时 \(v\) 子树内的最远点距离),于是相当于对 \(u\) 的贡献限制了下界:\([h_u, \min(g_u + 1, f_u - 1)]\),同样换根 \(\rm dp\) 出 \(h, q\) 后直接计算即可。
复杂度 \(\mathcal{O}(n)\)。
另外提一嘴,这个题存在另外一个思考方向。
我们不考虑选取关键点来统计,考虑将重复计算的联通子树减掉。
根据合法的染色中心构成联通子树这一性质,我们考虑使用 \(\forall\) 联通子树 \(V\) 满足 \(|V| - |E| = 1\) 来容斥。
具体地,我们考虑将所有点不包含全集的贡献先全部加上。
然后枚举每条边 \((u, v)\),考虑计算出 \(u, v\) 构成相同的联通子树剪掉,这里其实就与上面做法的上下界等价。
因此这题存在一个不同的思考方式但导出的结果一模一样。
AGC008 部分简要题解的更多相关文章
- Noip 2014酱油记+简要题解
好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...
- Tsinghua 2018 DSA PA2简要题解
反正没时间写,先把简要题解(嘴巴A题)都给他写了记录一下. upd:任务倒是完成了,我也自闭了. CST2018 2-1 Meteorites: 乘法版的石子合并,堆 + 高精度. 写起来有点烦貌似. ...
- Codeforces 863 简要题解
文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 简要题解?因为最后一题太毒不想写了所以其实是部分题解... A题 传送门 题意简述:给你一个数,问你能不能通过加前导000使其成为一个回文数 ...
- HNOI2018简要题解
HNOI2018简要题解 D1T1 寻宝游戏 题意 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为 ...
- JXOI2018简要题解
JXOI2018简要题解 T1 排序问题 题意 九条可怜是一个热爱思考的女孩子. 九条可怜最近正在研究各种排序的性质,她发现了一种很有趣的排序方法: Gobo sort ! Gobo sort 的算法 ...
- BJOI2018简要题解
BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...
- CQOI2018简要题解
CQOI2018简要题解 D1T1 破解 D-H 协议 题意 Diffie-Hellman 密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码)的情况下,通过不安全的信 ...
- AtCoder ExaWizards 2019 简要题解
AtCoder ExaWizards 2019 简要题解 Tags:题解 link:https://atcoder.jp/contests/exawizards2019 很水的一场ARC啊,随随便便就 ...
- Comet OJ - Contest #2 简要题解
Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...
随机推荐
- 警惕!PHP、Node、Ruby 和 Python 应用,漏洞还没结束!
12 月 10 日凌晨,Apache 开源项目 Log4j2 的远程代码执行漏洞细节被公开,作为当前全球使用最广泛的 java 日志框架之一.该漏洞影响着很多全球使用量前列的开源组件,如 Apache ...
- 后缀数组【原理+python代码】
后缀数组 参考:https://blog.csdn.net/a1035719430/article/details/80217267 https://blog.csdn.net/YxuanwKeith ...
- 在页面上绘制一张表格,使用 DOM 节点的动态添加和删除向表格中插入数据,点击表格每行后的“删除”超链接
查看本章节 查看作业目录 需求说明: 在页面上绘制一张表格,使用 DOM 节点的动态添加和删除向表格中插入数据,点击表格每行后的"删除"超链接,使用 DOM 节点的删除操作将对应的 ...
- MySQL数据库安装Version5.5
1.新建mysql用户 useradd -g hadoop -s /bin/bash -md /home/mysql mysql 创建.bash_profile,加载.bashrc 2.检查并且卸载系 ...
- 年功序列c++游戏
题目描述 在虚拟国度里多了很多 Virtual oier,为了树立对后辈的威信,从第 11 个 Virtual oier 开始的 oier 们搞起了年功序列的制度. 虚拟国度的创始人 oier Cht ...
- Selenium_获取界面handle、title和url(7)
from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get(" ...
- 工厂模式(python)
以字符串作为传递参数 以类名作为传递参数 来自为知笔记(Wiz)
- centos7 安装zabbix3.0 安装zabbix4.0 yum安装zabbix 国内源安装zabbix 阿里云服务器安装zabbix
首先,此篇文章是有原因的. 刚开始也和大家一样来学习安装zabbix 奈何网上的教程和现实出现不一样的情况 在安装zabbix过程中,因为zabbix下载源是在国外,下载途中会出现终止下载的情况 tr ...
- Easticsearch概述(API使用)二
Rest简介 一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务端互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制 Rest的操作分为以 ...
- Android函数抽取壳的实现
0x0 前言 函数抽取壳这个词不知道从哪起源的,但我理解的函数抽取壳是那种将dex文件中的函数代码给nop,然后在运行时再把字节码给填回dex的这么一种壳. 函数抽取前: 函数抽取后: 很早之前就想写 ...