“树”的问题
树上竞技 和 下落的小球 两道题都是很不错的树上的问题转换
树上竞技
对于边权和的问题,按套路来,找各个边的贡献即可
首先发现结论,对于一条边的两端,如果一端的人数大于另一端的人数
那么把集合点移向人多的一端肯定更优
设两端的点分别为 \(s\) 和 \(n-s\)
那么该边的贡献为:
按套路来,把 \(min\) 去掉,得
第二部分最后特判即可
考虑第一部分如何转移
首先加号两边的式子是等价的,还是套路,为简化式子,把 \(i\) 乘进去:
令:
考虑怎么由 \(G(s)\) 转移到 \(G(s+1)\)
题解很巧妙地用几何意义来转移,可以借鉴学习一下
\(G(s)\) 的几何意义为:(令 \(k=\frac{m-1}{2}\))
在 \(n-1\) 个物品中选 \(m-1\) 个物品,且前 \(s-1\) 个物品中最多放 \(k-1\) 个的方案数
当 \(G(s)\) 转移到 \(G(s+1)\) 时,只有前 \(s-1\) 个选了 \(k-1\) 个,且 \(s\) 也被选中的情况不会被算,所以:
综上,一条边的贡献为:
下落的小球
首先考虑无解情况,令 \(b(i)\) 为 \(i\) 子树叶子的操作数之和,\(c(i)\) 为 \(i\) 子树中的小球剩余量,那么恒有 \(b(i)-s(i)>=0\)
对于在该子树内的操作序列,前 \(b(i)-s(i)\) 个操作子树内小球的状态是不变的,后 \(s(i)\) 个操作尽是该子树内的小球状态变化
那么对于一个节点,考虑合并儿子的子树,
首先每个儿子节点一定是先进行各自的前 \(b(j)-s(j)\) 个操作,再进行剩下的操作,且互不影响
那我们可以分别合并前一半操作和后一半操作
那么就可以得到该节点的操作序列方案了
原文地址:https://www.cnblogs.com/zjxlm/p/15365169.html
- mysql、mongodb、python(dataframe).聚合函数的形式,以及报错解决方案
- JavaScript计算水仙花数【可自定义范围】
- JSP简单入门(1)
- mongodb取出json,利用python转成dataframe(dict-to-dataframe)
- JSP简单入门(2)
- JSP简单入门(3)
- 物化视图相关的性能改进 (r7笔记第58天)
- Maven 核心原理解析(1)
- LeetCode——Two Sum
- TensorFlow全新的数据读取方式:Dataset API入门教程
- 不经意发现的dba_objects和dba_tables中的细节(r7笔记第56天)
- LeetCode——Longest Substring Without Repeating Characters
- Python time模块详解(时间戳↔元组形式↔格式化形式三者转化)
- Maven 核心原理解析(2)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法