2024.8.5 test

A

你可以花费 \(x^2\) 的代价使 \(A_i\) 加上 \(x\)\(x\ge 0\),最后再加上代价为 \(c\sum |A_i-A_{i-1}|\),问最小代价。
\(n\le 10^5\)

我们可以把序列分成若干“山峰”以及“山谷”,山峰是不会加的。考虑从山谷开始做,即每次取出最小值。
设一开始处理 \(A_i\),发现 \(A_i\) 最多是到 \(\min(A_{i-1},A_{i+1})\),因为如果再往上,相邻的差是变大的。
我们考虑贪心的,假设 \(A_i\) 到了 \(A_i+x\),使得最优(二次函数顶点),后面也不会改变这个值。
如果 \(A_i\) 取到了 \(\min(A_{i-1},A_{i+1})\),那么合并这两个位置,因为右面这两个一定是一起走。
我们重复该过程。

B

给出 \(n\) 个集合 \(A_i\),满足 \(A_i\) 的最大值 \(<i\)\(B_i=\{i\}\cup (\cap_{k\in A_i}B_k)\)
\(q\) 次询问,每次给出若干个 \(k\),求 \(|\cup B_k|\)\(n\le 2e5\)\(k\) 的个数 \(\le 1e6\)

发现这个 \(B_i\) 的定义神似支配集的定义。
下面先介绍支配树。支配的定义是对于 \(s\to v\) 的所有路径都经过 \(u\),设 \(\Rightarrow\) 表示支配,那么 \(u\Rightarrow v\)
“支配”运算满足 \(u \Rightarrow v\)\(v \Rightarrow w\),那么 \(u\Rightarrow w\)。支配树的定义是对于 \(u\) 来说其所有祖先就是其支配集。
关于求 \(u\) 的父亲,也就是就 \(u\) 前驱的支配集的交集,因为交集是支配树上一个点到根的链的形式,
那么 \(u\) 的父亲连向 \(u\) 前驱在树上的 \(lca\) 即可。
回到原题,建出支配树,询问的话也就是路径并的大小,深度和减去 dfn 排序后相邻 lca 深度。

D

一棵树,求标号方案数,使得所有 \([i,i+k-1]\) 里的点都构成连通块。\(n\le 100\)

对于 \(2k\le n\) 的情况,整棵树也就是两个大小为 \(k\) 的连通块由编号在 \([k+1,n-k]\) 上连续的链连接。
枚举这条链。这两个联通块有什么性质呢?显然第一棵树编号大的为编号小的父亲,第二棵反之。
外向树拓扑序计数。
对于 \(2k>n\) 的情况,这里非常麻烦,我们先确定一个大小为 \(2k-n\) 的连通块。
然后剩下两个部分,设 \([1,n-k]\) 为红色,\([k+1,n]\) 为蓝色,剩下是白色。
注意红色和蓝色都是不一定要联通的,可能是森林,只需要满足父亲的儿子的编号大小关系。
红色和蓝色通过中间的白色联通。
那么我们树形 dp,枚举根代表红树,蓝树的(虚)根,因为红树和蓝树是森林。
\(f_{u,c1,c2}\) 表示 \(u\) 子树内,\(c_1\) 个蓝色已确定,\(c_2\) 个红色已确定。做背包合并,类似二维 OGF。
然而这样会算重,钦定根的时候会重复计算,发现只钦定重心为根就是对的,所有情况都会被算到。
重心一定是白色,若重心是红色,就代表蓝色的点和白色的点全部位于其某个子树内。
而蓝色的点和白色的点的个数和一定超过一半,但重心下的子树大小一定不超过一半。
仅此。

posted @ 2024-08-05 16:55  s1monG  阅读(6)  评论(0编辑  收藏  举报