虚树,顾名思义,就是假的树. 在树形dp中有很大的优化作用. 虚树主要针对于树中关键点的询问.我们仅仅对关键点及其lca建一棵树.这样只要保证sigmak在时间复杂度内即可. 以下是建树的模板 q=read(); for(int i=1;i<=q;++i) { num=read(); for(int ...
分类:
其他好文 时间:
2020-03-14 12:36:13
阅读次数:
50
「SDOI2009」HH的项链 "传送门" 数据加强了,莫队跑不过了。 考虑用树状数组。 先把询问按右端点递增排序。 然后对于每一种贝壳,我们都用它最右一次出现的位置计算答案。 具体细节看代码吧。 参考代码: ...
分类:
其他好文 时间:
2020-01-24 00:25:21
阅读次数:
72
虚树+DP 每个点记录自己到根路径上的最小边权 $mn[u]$ ;DP时初始化 $ans[u]=\sum\limits_{v\in son_u} ans[v]$ ,如果是关键点则 $u$ 的答案 $ans[u]=mn[u]$ ,若不是关键点则 $ans[u]=\min(ans[u],mn[u])$ ...
分类:
其他好文 时间:
2020-01-18 10:45:44
阅读次数:
66
【题目描述】 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。 【输入格式】 第 ...
分类:
其他好文 时间:
2019-12-29 15:13:13
阅读次数:
75
"题意" 显然加上一个数相等就是差分数组相等,于是问题变为求几个串的最长公共子串。 这里我学习了如何用SA求LCS。 首先问题要转化成求一些后缀的最长公共前缀,要求这些后缀分属不同的串。 于是二分答案,于是问题就变成求一段连续的$height$数组,它们都$\geqslant mid$,并且至少分属 ...
分类:
其他好文 时间:
2019-12-17 22:11:56
阅读次数:
133
题目链接:https://www.luogu.com.cn/problem/P2479 题目大意:求平面$n$个点中,到其它$n 1$个点的曼哈顿距离最大和最小距离之差最小的点,求出这个这个距离差。 用$K D Tree$维护区间,剪枝搜索。 值得一提的是,对于$maxdis$的查询还是比较显然的, ...
分类:
其他好文 时间:
2019-12-07 23:20:47
阅读次数:
122
"题意" 显然书剖套李超树。 考虑怎么算函数值: 设$(x,y)$的$lca$为$z$,我们插一条斜率为$k$,截距为$b$的线段。 $(x,z)$上的点$u$: $f(u)=k (dis[x] dis[u])+b= k dis[u]+(k dis[x]+b)$ 所以对这条路径插入斜率为$ k$,截 ...
分类:
其他好文 时间:
2019-12-05 22:39:42
阅读次数:
167
题目描述 给定长为 n 的数列 a, 要求划分成 m 段,使得方差最小, 输出方差$ m^2$ 题解 斜率优化好题 设第 i 段长为 $len_i$ 先考虑方差($S^2$)的式子: $$ S^2 = \frac{1}{m} \sum_{i=1}^m(len_i (\frac{1}{m} \sum_ ...
分类:
其他好文 时间:
2019-11-01 20:05:30
阅读次数:
110
首先我们可以容易地知道任意区间交换的顺序对答案没有影响. 所以我们可以按照区间的长度进行搜索. 又因为每一种长度的区间只能交换一次,所以我们可以进行剪枝. 对于当前搜索区间的长度$2^x$,我们可以对于每一个长度为$2^{x+1}$的区间,判断它是不是单调递增且相邻两数之间差$1$,如果不是,则打上 ...
分类:
编程语言 时间:
2019-10-30 00:04:39
阅读次数:
115
"[SDOI2011]染色" 简化题意 $:$ 给定一棵点带权的树,维护两种操作 $:$ 1.把 $(x,y)$ 这条链上的点权全部置为 $w$. 2.查询 $(x,y)$ 这条链上有多少不同的点权. 树剖 $+$ 线段树维护即可. 线段树维护覆盖标记,权值个数和左端点右端点的权值. 向上合并的时候 ...
分类:
其他好文 时间:
2019-10-29 09:34:34
阅读次数:
76