最近比较颓废,写点题练练智商...
感觉自己还是太弱了
进入正题
BZOJ3743 [Coci2015]Kamp
题意:一棵树有边权,有k个关键点,求在每个点出发遍历每个关键点一次的最小边权和
Sol:对于一个点,ans_i=以i为根的k个点的虚树边权和*2-i出发最长链;
一遍dfs求出子树边权和,向下最长/次长链,再dp一遍出解,时间复杂度O(n)
BZOJ3745 [Coci2015]Norma
题意:
Sol:考虑枚举右端点,线段树维护每个位置为左端点到右端点的答案,右端点每次移动会改变一个区间的最值,可用单调栈处理;
把式子拆开,线段树节点维护6个值和2个标记,每次查询即可,时间复杂度O(nlogn)
BZOJ3810 [Coci2015]Stanovi
题意:n*m矩形分割成若干块,要求每块都与边界相连,每块代价为(面积-k)^2,求最小代价
Sol:任意合法切割方案一定存在一条线将矩形分割,可以枚举分割线dp,状态中记录上下左右是否作为边界,都不是的赋值正无穷
时间复杂度O(n^3)
BZOJ3881 [Coci2015]Divljak
题意:n个字符串和一个字符串集合,支持向集合中加入一个字符串,询问i串是集合中几个串的子串
Sol:对n个串建AC自动机,新加入的字符串在自动机上跑,每个节点更新fail树上到根的路径且重复代价只算一次
可转化为求树链交,将点按dfs序排序,每个点到根+1,相邻点lca到根-1
查询即为查询fail树上子树和,树状数组维护,时间复杂度O(mlogm) m为字符串总长