P7897
第一道正经的 Ynoi,特此写篇题解纪念一下。
Algorithm 1
可以想到 \(O(nm)\) 的 DP。
我们定义 \(dp_u\) 为 \(u\) 子树内并包含 \(u\) 的连通点集,权值之和最大。
所以就有 DP 式啦!!
\]
Algorithm 2
我们需要考虑优化。
既然加上 \(dp_v\) 的条件为 \(dp_v \ge 0\)。那么我们可以把不符合这个条件 \(v\) 与他的父亲节点 \(u\) 的边删掉,到 \(dp_v \ge 0\) 时把 \(v\) 和 \(u\) 连起来。
所以我们的 DP 转移就变成了:
\]
如果我们把 \(x\) 从小到大排序,那么 \(dp_u\) 就一定是单调递增的。
所以 \(\max(0,dp_u)\) 是取 \(0\) 还是 \(dp_u\) 指只会变一次。
所以 \(u\) 与 \(v\) 的联通关系也只会改变一次。
所以我们如果可以的时候只需要在 \(dp_v\) 大于 \(0\) 时从 \(v\) 往上走,如果可以联通就连上。
此时我们需要计算 \((u,v)\) 这一条边在 \(x \ge\) 时联通。
所以我们就可以列出方程:
\]
解出 \(val \le \left \lceil \dfrac{-sum}{siz} \right \rceil\)。
其中 \(sum\) 为子树和,\(siz\) 为字数大小。
所以我们就可以把所有的 \(\left \lceil \dfrac{-sum}{siz} \right \rceil\) 扔到一个堆里。每次取出最小元素看是否小于等于当前的 \(x\),如果小于等于就修改。
所以我们只需要一个数据结构维护以下几种操作:
加边.
将某个点到根的路径修改。
单点查询。
我们做出来的新树中某个点到根的路径在原树中就是一条链。
所以其实我们可以忽视这个动态加边,只需用并查集维护根节点即可。
对于 \(2,3\) 操作,树剖肯定会超时,所以我们考虑树上差分。
查询时,只需查询这个点子树内所有点权和。这样就可以 \(dfs\) 序 + 树状数组维护即可。
随机推荐
- var ,let和const三者之间的区别
var 声明变量可以被修改,可以被重复声明.有变量提升(写的位置和使用时候的位置不一样). let声明变量可以被修改,,但不能重复声明.如文件中有一个let a = 0;后面就不能在定义let a=* ...
- 3 种发布策略,解决 K8s 中快速交付应用的难题
作者 | 郝树伟(流生)阿里云高级研发工程师 前言 软件技术更新换代很快,但我们追求的目标是一直不变的,那就是在安全稳定的前提下,增加应用的部署频率,缩短产品功能的迭代周期,这样的好处就是企业可以在更 ...
- 一文了解阿里一站式图计算平台GraphScope
简介: 随着大数据的爆发,图数据的应用规模不断增长,现有的图计算系统仍然存在一定的局限.阿里巴巴拥有全球最大的商品知识图谱,在丰富的图场景和真实应用的驱动下,阿里巴巴达摩院智能计算实验室研发并开源了全 ...
- 在线工具的 UI 变迁
V1. Ref:https://www.cnblogs.com/farwish/p/16823474.html
- [Caddy2] Caddyfile 指令
以下是 Caddyfile 的标准指令. acme_server An embedded ACME server basicauth Enforces HTTP Basic Authenticatio ...
- JavaScript函数属性,方法,ES6拓展内容总结(箭头函数使用,rest参数)
引言 函数在js中也是一个对象,所以它也是有着自己的属性和方法的,了解它们能更好的使用函数. // 各种样子的函数 function foo() {} function foo(a) {} funct ...
- C语言程序设计-笔记5-数据类型和表达式
C语言程序设计-笔记5-数据类型和表达式 例6-1 大小写英文字母转换.输入一样字符,将其中的大写字母转换为相应的小写字母后输出,小写字母转换为相应的大写字母后输出,其他字符按原样输出. #incl ...
- 阿里巴巴MySQL开源中间件Canal入门
前言 距离上一篇文章发布又过去了两周,这次先填掉上一篇秒杀系统文章结尾处开的坑,介绍一下数据库中间件Canal的使用. Canal用途很广,并且上手非常简单,小伙伴们在平时完成公司的需求时,很有可能会 ...
- 解决浏览器打不开github网站常用方法
switchHost使用指南 https://blog.csdn.net/weixin_45022563/article/details/123922815 下载软件: https://github. ...
- Xcode多进程调试:WKWebView
由于WKWebView使用的是多线程架构,渲染模块和网络模块都各自在一个单独的进程里面,因此,如果需要设置渲染模块或者网络模块里面的断点,需要做一些特殊处理. 举个例子,假设在Xcode里面设置了渲染 ...