二轮前做题记录2

这段时间要主要锻炼一下代码水平,多写一些用数据结构维护的题目或者是细节较多的题目

1.Power Tree

题意:给你一棵有根树,定义叶子为度数为$1$的点。
你可以以$w_x$的代价控制$x$点。选择控制之后可以给它的子树里的叶子加上任意整数$t$。
你要以最小的总代价使得:另一个人在叶子上任意放数,你都可以把它们都变成$0$。

题解:可以发现,每个被选择的点控制的区间都是叶子$DFS$序上的连续一段(这不是废话么)

每个点对叶子的控制可以转化成对一个区间$[L,R]$加上一个数$w$,即对$[L,n]$加上一个数,$[R+1,n]$减去一个数

所以可以从$L$到$R+1$连一条权值为$w$的边,表示在$L$加上$w$,在$R+1$处减去$w$

容易发现当所有叶子节点都联通了方案就是合法的,那么跑一遍最小生成树即可

 

2.Niyaz and Small Degrees

题意:给你$n$个点的树,边有边权
问使得所有的点度数都小于等于$x$的最小删边的代价($x\in [0,n-1]$)

题解:有一个简单的树形$DP$,设$f[i][0/1]$表示这点的父亲是否被选的最小代价

对于$x$的$dp$值,先将所有的$f[v][0]$算进答案,然后加入一定量的$f[v][1]-f[v][0]+dis(u,v)$来保证点度合法

可以用堆来维护这个过程

然后发现$\sum_{i=0}^{n-1}\sum_{j=1}^n[dig_j>i]=\sum_{i=1}^n dig_i =\sum_i=0^{n-1}\sum_{j=1}^n[dig_j>i]=2*(n-1)$是在一个合法范围内的

也就是每次枚举点的度数并且只计算大于该点度的点的话时间复杂度是可以得到保证的

那么对于小于等于这个点度的点,直接将边权加入堆中就可以了

 

3.Double Tree

题意:给出一个$2N$个点、$3N-2$条边的无向图,边有边权。这张图满足以下性质:
①对于图上的一条边$(u,v)(2 | u , 2 | v)$,一定存在边$(u+1,v+1)$,反之亦然;
②图上存在边$(u,u+1)$
可以知道编号为偶数的点的导出子图和编号为奇数的点的导出子图都是一棵树,且它们同构。
现在给出QQ组询问,每组询问询问两个点$x,y$之间的最短路长度

题解:可以两遍树形$dp$求出对应点的最短路,那么接下来要么往终点方向走要么往对应点走,倍增维护这个过程即可。

 

4.Max Mex

题意:给定一棵有$n$个点的树,每个节点有点权。所有的点权构成了一个$0~\sim~n - 1$的排列。有 $q$次操作,每次操作 $1$ 为交换两个点的点权,操作$2$为查询$Mex(l)$值最大的$Mex(l)$值,其中$l$是树上的一条路径。定义一条路径$l$的$Mex$值$Mex(l)$为这条路径上最小的没有出现过的自然数

题解:对每个区间维护一下这个区间内的数是否可以构成一条链,合并的时候枚举$LCA$分类讨论即可。

 

5.距离

题意:给了你一棵树,然后给每个点一个新标号,每次问旧标号的点$u,v$路径上的所有点对应的新标号点到旧标号点$K$的距离总和;

题解:尝试把式子化开,然后发现跟[LNOI2015]那道题目基本一样,用一个可持久化线段树来维护即可,这个算是套路了

 

6.Cool Slogans

题意:给出一个长度为$n$的字符串$s[1]$,由小写字母组成。定义一个字符串序列$s[1....k]$,满足性质:$s[i]$在$s[i-1](i>=2)$中出现至少两次(位置可重叠),问最大的$4$是多少,使得从$s[1]$开始到$s[k]$都满足这样一个性质。

题解:在后缀树上$DP$即可,能向下转移则向下转移,否则从转移到上一个点的位置向当前转移。判断是否出现两次用线段树合并维护$right$集合然后搞一搞即可。

 

7.Security

题意:给出一个字符串$S$ 给出$Q$个操作,给出$L, R, T$,求字典序最小的$S_1$,使得$S_1$为$S[L..R]$的子串,且$S_1$的字典序严格大于$T$。输出这个$S_1$,如果无解输出$-1$

题解:首先贪心考虑,$S1$和$T$的公共前缀是越多约好的。可以先求出$T$跟整个串匹配的最长公共前缀。然后倒着枚举前缀的长度并枚举下一个字母是什么,判断这个字符串能否在区间内被匹配。

 

8.你的名字

题意:传送门

题解:

68分做法: 

首先对于T串的每个位置i求出S最长在T[1...i]中匹配多长的后缀

然后$ans=\sum_{i=1}^n(max(0,len[i]-max(len[fa[i]],p[i])))$

现在考虑100分做法,我们显然还是要维护那个p数组

问题在于如何在T的每个位置查询与S[l...r]的公共后缀呢

大概线段树合璧以后胡乱搞搞就行了

posted @ 2019-04-11 20:28  Slr  阅读(156)  评论(0编辑  收藏  举报