首页 > 其他分享 >树上一些点的选 题解

树上一些点的选 题解

时间:2024-09-10 16:24:47浏览次数:8  
标签:dpt vert min 题解 sum right 一些 树上 operatorname

题意简述

给你一棵 \(n\) 个节点以 \(1\) 为根的有根树,和一个整数 \(m\)。

对于树上每一个点 \(u\),有三个权值 \(X, Y, Z\)。你需要在 \(u\) 的祖先里(不含 \(u\))中选出至少 \(X\) 个点,记 \(S_1\) 表示这些点到 \(u\) 的距离之和;在 \(u\) 的后代里(不含 \(u\))中选出至少 \(Y\) 个点,记 \(S_2\) 表示这些点到 \(u\) 的距离之和。选出的点数应恰好等于 \(m\)。对于每一个点,求 \(\min \vert S_1 - S_2 + Z \vert\)。如果没有合法的选点方案,输出 \(-1\)。

题目分析

这个距离和不喜欢,拆掉。

为方便叙述,记祖先中选出点集为 \(U\),\(x = \vert U \vert\),同理记后代中选出点集为 \(D\),\(y = \vert D \vert\)。那么:

\[\begin{aligned} S_1 &= \sum _ {v \in U} \operatorname{dis}(v, u) \\ &= \sum _ {v \in U} \operatorname{dpt}(u) - \operatorname{dpt}(v) \\ &= x \operatorname{dpt}(u) - \sum _ {v \in U} \operatorname{dpt}(v) \\ \end{aligned} \]

同理 \(S_2 = -y \operatorname{dpt}(u) + \sum \limits _ {v \in D} \operatorname{dpt}(v)\),那么所求值即为:

\[\begin{aligned} & \quad \ \min \left \vert \left (x \operatorname{dpt}(u) - \sum _ {v \in U} \operatorname{dpt}(v) \right ) - \left (-y \operatorname{dpt}(u) + \sum \limits _ {v \in D} \operatorname{dpt}(v) \right ) + Z \right \vert \\ &= \min \left \vert x \operatorname{dpt}(u) - \left ( \sum _ {v \in U} \operatorname{dpt}(v) \right ) + y \operatorname{dpt}(u) - \left ( \sum \limits _ {v \in D} \operatorname{dpt}(v) \right ) + Z \right \vert \\ &= \min \left \vert (x + y) \operatorname{dpt}(u) + Z - \left ( \sum _ {v \in U} \operatorname{dpt}(v) + \sum \limits _ {v \in D} \operatorname{dpt}(v) \right ) \right \vert \\ \end{aligned} \]

发现 \(x + y\) 为一定值 \(m\),故而所求值即为两个 \(\sum\) 与一定值的最少差值绝对值,也就是尽量靠近那个定值。这就来到了此题难点所在。

一个很神的想法是去证明,这两个 \(\sum\) 的和的取值范围为一段连续区间,再扣掉常数个点,这样一个东西。

证明:

显然其有最值。从其取最大值的选点方案,往最小值调整。初始时所有点聚集在下方,取到最大值。

每次我们可以取一个 \(u\),如果 \(\operatorname{fa}(u)\) 没被选,我们就可以让 \(u \gets \operatorname{fa}(u)\),则 \(\operatorname{dpt}(u) \gets \operatorname{dpt}(u) - 1\),就将和往下调整了 \(1\)。

我们还有另一种方法。可以让 \(u\) 的一个孩子 \(u\),越过 \(u\),走到 \(\operatorname{fa}(u)\)。但是这样导致将和往下调整了 \(2\)。注意到,我们可以选取另一个点,向下走一步来抵消。如果找不到这一个用来抵消的点,就不可以使用这一种方法调整 \(1\)。如果此时使用前一种方法也不能下调 \(1\),我们的取值范围就被挖去了这一个点。

找不到这样的点,当且仅当所有点都不存在一个没被选择和孩子。情况数不多,大力分讨调整了 \(2\) 后的情形:

  1. 上方满了,下方为空。
  2. 上方满了,下方全聚集在底部。
  3. 上方只有移动的点,下方为空。
  4. 上方只有移动的点,下方全聚集在底部。

这些局面的 \(\sum + \sum - 1\) 是不能取到的。

那么,我们只需要求出这两个 \(\sum\) 的上下界即可。

对于深度之和的下界,就是尽可能多的点在 \(u\) 的祖先。说明此时有 \(x = x_{\max}\) 个点,深度分别为 \(1, \ldots, x_{\max}\)(\(\operatorname{dpt}(1) = 1\));剩下下方 \(y = m - x_{\max}\) 个点,尽可能靠上贴在 \(u\) 下方。

对于深度之和的上界,同理,尽可能地靠下。上方有 \(x = x_{\min}\) 个点,深度为 \(\operatorname{dpt}(u) - x_{\min}, \ldots, \operatorname{dpt}(u) - 1\);下方 \(y = m - x_{\min}\) 个点,尽可能靠下。

求 \(x_{\min}, x_{\max}\) 是简单的。

\[\left\{\begin{matrix} X \leq x \leq \operatorname{dpt}(u) - 1 \\ Y \leq m - x \leq \operatorname{siz}(u) - 1 \end{matrix}\right. \Rightarrow \max \Big \{ X, m - \operatorname{siz}(u) + 1 \Big \} \leq x \leq \min \Big \{ \operatorname{dpt}(u) - 1, m - Y \Big \} \]

对于 \(1 \sim u\) 这条链上的答案很好统计,关键在于子树内,选出 \(k\) 个点,尽可能靠上 / 靠下的深度和。直接上线段树合并维护子树每个深度出现次数,加上前 / 后 \(k\) 大值的和查询。或者树上启发式合并,树状数组上二分。

前者是 \(\Theta(n \log n)\) 的。

代码


标签:dpt,vert,min,题解,sum,right,一些,树上,operatorname
From: https://www.cnblogs.com/XuYueming/p/18406332

相关文章

  • CF717A Festival Organization 题解
    Description一个合法的串定义为:长度在\([l,r]\)之间,且只含0,1,并且不存在连续\(2\)个或更多的\(0\)。现在要选出\(k\)个长度相同的合法的串,问有几种选法,答案模\(10^9+7\)。\(1\leqk\leq200,1\leql\leqr\leq10^{18}\)。Solution容易发现答案为\(\sum_{i=l+2}^{r......
  • 【Py/Java/C++三种语言OD独家2024E卷真题】20天拿下华为OD笔试之【回溯】2024E-字符串
    可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入描述输出描述示例一输入输出说明示例二输入输出说明解题思路代码pythonjavacpp时空复杂度华为OD算法/大厂面......
  • 架构师备考的一些思考(二)
    前言以我的视野来看,部长或技术总监这种岗位还是比较难竞争的,换言之,程序员的上升空间比较窄,如果想要拿到高级岗位,最好的是工作三五年后就转项目经理,然后再往上爬。架构师倒是也能晋升高级岗位,但就效率而言,是非常低的。就我的经验而言,架构师系的高级职位通常是技术管理一手抓,但这......
  • Android中SurfaceView的双缓冲机制和普通View叠加问题解决办法
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点SurfaceView是Android平台上用于高效渲染图形的视图控件。它将内容绘制在一个独立的Surface上,可以直接由渲染线程访问,从而提高性能,尤其是在需要频繁刷新和更新......
  • 数据库课设--图书管理系统一些主要功能的实现(sql server)
    1.用户登录(1)功能需求:在界面中填写用户号和密码并选择用户类型。如果用户名和密码存在,则提示登录成功;否则提示“用户名或密码错误”,此外如果是读者,还要判断用户是否过期。(2)主要代码:try{……intident=reader.isSelected()?0:1;//获取单选框身份:0为读者,1为......
  • 题解:CF913C Party Lemonade
    分析因为容量为\(2^{i-1}\),所以对于任意的\(i<j\),第\(j\)种瓶子一定可以通过选择\(2^{j-i}\)个\(i\)种瓶子来实现。定义一个瓶子的性价比为\(\dfrac{\textrm{容量}}{\textrm{价格}}\),即\(\dfrac{2^{i-1}}{c_i}\)。我们可以按照每个瓶子的性价比从高到低排序,依次选择......
  • 题解:CF913D Too Easy Problems
    题意给定一场考试,考试会持续\(T\)毫秒,由\(n\)道题目组成,你可以用\(t_i\)毫秒解决第\(i\)个问题,每个问题给定一个整数\(a_i\)。要求你选出一个试题集合\(S\),若该集合大小为\(k\),它应满足\(T\geq\sum_{i\inS}\limitst_i\),你需要最大化\(\sum_{i\inS}\limits[a_i......
  • 题解:P5618 [SDOI2015] 道路修建
    题意给定一个\(2\timesN\)的网格,网格上的点和上下左右连边。要求支持以下几种操作:修改某条边的边权。求满足\(y\in[l,r]\)的点构成的点集的最小生成树。分析这道题的想法和P4246[SHOI2008]堵塞的交通很相似。注意到\(N,M\leq6\times10^4\),并且查询的是......
  • 题解:P6089 [JSOI2015] 非诚勿扰
    分析首先我们要求出对于第\(i\)位女性,她选择每个列表中的男性的概率是多少。第一轮选择第一位的概率为\(p\),选择第二位的概率为\(p(1-p)\),以此类推。显然第一轮选择第\(k\)位的概率为\(p(1-p)^{k-1}\)。假设列表中有\(n\)名男性,那么第二轮选择第一位的概率为\(p(1-p......
  • 题解:P3968 [TJOI2014] 电源插排
    题意维护一个\(01\)串,初始均为\(0\),支持:单点将\(1\)修改为\(0\)。查询区间中\(1\)的个数。查询最长且最靠右的连续\(0\)段的靠右的中点,并将其改为\(1\)。分析第一个操作和第二个操作显然使用动态开点线段树维护。我们只需要解决第三个操作。我们用平衡树存储......