problem && blog

第一道正经的 Ynoi,特此写篇题解纪念一下。


Algorithm 1

可以想到 \(O(nm)\) 的 DP。

我们定义 \(dp_u\) 为 \(u\) 子树内并包含 \(u\) 的连通点集,权值之和最大。

所以就有 DP 式啦!!

\[dp_u = a_u + x + \max(0,dp_v)
\]

Algorithm 2

我们需要考虑优化。

既然加上 \(dp_v\) 的条件为 \(dp_v \ge 0\)。那么我们可以把不符合这个条件 \(v\) 与他的父亲节点 \(u\) 的边删掉,到 \(dp_v \ge 0\) 时把 \(v\) 和 \(u\) 连起来。

所以我们的 DP 转移就变成了:

\[dp_u = a_u + x + dp_v
\]

如果我们把 \(x\) 从小到大排序,那么 \(dp_u\) 就一定是单调递增的。

所以 \(\max(0,dp_u)\) 是取 \(0\) 还是 \(dp_u\) 指只会变一次。

所以 \(u\) 与 \(v\) 的联通关系也只会改变一次。

所以我们如果可以的时候只需要在 \(dp_v\) 大于 \(0\) 时从 \(v\) 往上走,如果可以联通就连上。

此时我们需要计算 \((u,v)\) 这一条边在 \(x \ge\) 时联通。

所以我们就可以列出方程:

\[siz \times val + sum \ge 0
\]

解出 \(val \le \left \lceil \dfrac{-sum}{siz} \right \rceil\)。

其中 \(sum\) 为子树和,\(siz\) 为字数大小。

所以我们就可以把所有的 \(\left \lceil \dfrac{-sum}{siz} \right \rceil\) 扔到一个堆里。每次取出最小元素看是否小于等于当前的 \(x\),如果小于等于就修改。

所以我们只需要一个数据结构维护以下几种操作:

  1. 加边.

  2. 将某个点到根的路径修改。

  3. 单点查询。

我们做出来的新树中某个点到根的路径在原树中就是一条链。

所以其实我们可以忽视这个动态加边,只需用并查集维护根节点即可。

对于 \(2,3\) 操作,树剖肯定会超时,所以我们考虑树上差分。

查询时,只需查询这个点子树内所有点权和。这样就可以 \(dfs\) 序 + 树状数组维护即可。


code

随机推荐

  1. var ,let和const三者之间的区别

    var 声明变量可以被修改,可以被重复声明.有变量提升(写的位置和使用时候的位置不一样). let声明变量可以被修改,,但不能重复声明.如文件中有一个let a = 0;后面就不能在定义let a=* ...

  2. 力扣203(java&python)-移除链表元素(简单)

    题目: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 . 示例1: 输入:head = [1,2,6,3,4 ...

  3. EventBridge 在 SaaS 企业集成领域的探索与实践

    简介: 当下降本增效是各行各业的主题,而 SaaS 应用作为更快触达和服务业务场景的方式则被更多企业熟知和采用.本文将结合实际业务场景讲述在 SaaS 行业的洞察与 SaaS 集成的探索实践. 作者: ...

  4. 性能提升40%!阿里云神龙大数据加速引擎获TPCx-BB世界排名第一

    ​简介:神龙大数据加速引擎,针对大数据常用组件,如Spark.Hadoop.Alluxio等,结合阿里云神龙架构的特性,进行软硬一体化优化,形成独一无二的性能优势,最终,使复杂SQL查询场景性能相比社 ...

  5. [FAQ] 阿里云一口价域名购买之后在哪里看

    进入控制台,产品和服务中找到"域名",进去后在左侧菜单有 "已买到的域名". 如图: Link:https://www.cnblogs.com/farwish/ ...

  6. dotnet 将控制台 Console.WriteLine 内容输出到文件

    很多伙伴喜欢使用 Console.WriteLine 打日志,也许是打起来顺手.打完了之后,又想着,要是能够输出到本机文件那就更好了.既然很多伙伴都有这个想法,那 dotnet 自然就是有方便的方法让 ...

  7. 习题8 #第8章 Verilog有限状态机设计-2 #Verilog #Quartus #modelsim

    2. 设计一个"1001"串行数据检测器,其输入.输出如下: 输入x:000 101 010 010 011 101 001 110 101 输出z:000 000 000 010 ...

  8. 03 elasticsearch学习笔记-IK分词器?

    目录 1. 什么是IK分词器 2. 下载IK分词器 3. 使用kibana测试! 4. 创建自定义词典 5. Analysis 1. 什么是IK分词器 2. 下载IK分词器 下载地址,版本要和ES的版 ...

  9. 安装assimp失败

    使用Cmake和Visual Studio编译assimp成功(包括Debug和Release),并且安装Release版本也成功,但安装debug版本失败,安装输出信息如下: 通过提示找到脚本文件, ...

  10. vue 安装教程(如何在node环境下搭建vue项目)

    如果要配置node.js环境请查看(node.js环境在Window和Mac中配置,以及安装cnpm和配置Less环境)在终端输入命令 cnpm -v出现版本号 1.安装vue    window : ...