SD
2022/6/19 23:23:39
本文主要是介绍SD,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
D1T1
树形 \(\text{DP}\)。
令 \(f_{u,s,k},(k\in\{0,1\})\) 表示仅考虑以点 \(u\) 为根的子树,固定 \(u\) 的权值为 \(s\),\(u\) 子树中是否有点的权比 \(u\) 的权大的方案数。
\[\begin{aligned}\\ f_{u,s,0}&=\sum_{v\in\operatorname{son}(u)}\sum_{w\in\operatorname{son}(u),w<v}[(\sum_{i=0}^sf_{v,i,0})\times(\sum_{i=0}^sf_{w,i,0})]\\ \end{aligned}\]\[f_{u,s,1}=\sum_{v\in\operatorname{son}(u)}\sum_{w\in\operatorname{son}(u),w<v}[(\sum_{i=s}^mf_{v,i,1}+\sum_{i=s+1}^mf_{v,i,0})\times(\sum_{i=s}^mf_{w,i,1}+\sum_{i=s+1}^mf_{w,i,0})] \]把 \(f_{u,i,k}\) 做个前缀和然后逐个合并,时间复杂度 \(O(nm)\)。
D1T2
朴素的 \(\text{DP}\) 是令 \(f_{i,j}\) 表示当前数列的和为 \(i\),最后一个数为 \(j\) 的价值和,那么 \(f_{i,j}=c\times f_{i-j,j+1}+f_{i-j,j-1}\)。直接转移,时间和空间复杂度 \(O(n^2)\)。
优化的还没看懂。
UOJ218 【UNR #1】火车管理
我们建一棵以下标为键值的可持久化线段树,维护每个位置的栈顶元素是哪个时刻加入的,然后另维护一棵普通线段树来维护答案,每次区间 push
的时候在可持久化线段树和答案树上分别做一个区间覆盖,同时维护一个 \(Q[t]\) 表示时刻 \(t\) push
进去的元素 \(x\)。
对于单点 pop
,首先在可持久化线段树上查询单点的栈顶的加入时刻 \(t\),然后在 \(t-1\) 时刻的可持久化线段树上查询当时的栈顶加入时刻 \(t'\),\(Q[t']\) 就是 pop
后栈顶的元素。在两棵线段树上分别单点修改即可。
可持久化线段树都要支持区间改值,可以直接用标记永久化。
时间复杂度 \(O(q\log n)\)。
这篇关于SD的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南