Examples

2022-12-7 #5 明白你不愿放弃的爱 现在沿途的风景依然精彩

——校长《明日DISCO》

今天看了看 Stern-Brocot 树,发现啥都不记得了。

性质:二叉搜索树,最简性、唯一性、覆盖性。

\((a,b),(c,d)\) 以某种方式相邻的充要条件是 \(|ad-bc|=1\)

从根结点到结点 \(\frac ab\) 只需跳跃 \(O(\log \max\{a,b\})\) 条相同方向的链。

注意一棵子树 \((a,b),(c,d)\) 到左、右儿子的移动是线性变换,可以用矩阵刻画。(结合上面的性质,跳跃相同方向的链可以矩阵快速幂)

还有一种理解是把分数理解成平面向量,分数值即为斜率。

双曲线下整点计数 DIVCNT1

P8058 [BalkanOI2003] Farey 序列

21 ABC273Ex Inv(0,1)ving Insert(1,0)n

只需建出 \(n\) 个分数在 SBT 上的虚树,然后统计每个点被统计的次数,这个可以使用启发式合并解决。

递归建立虚树,若当前点是一个分叉点,直接递归左右,否则要跳一段相同方向的链,类似解一个 \(\frac{a+kc}{b+kd}>p\)\(k\) 最大值,\(O(1)\) 计算即可。

22 ARC123F Insert Addition

尝试将其向 SBT 上靠,我们用一个数对 \((u,v)\) 表示一个整数 \(p=au+bv\),这样生成的序列就是 SBT 的形式了。

我们在 SBT 上跳,先找到 \(L\) 对应的位置,然后直接 dfs 就可以输出剩下数了,由于树深度不超过 \(n\),我们只会遍历到最多 \(n+R-L+1\) 个数。

问题在于计算一棵子树 \((p,q)\) 的大小,我们使用莫比乌斯反演:

\[\sum_{d=1}^n\mu(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\lfloor\frac{\lfloor\frac nd\rfloor-ip}{q}\rfloor \]

容易 \(O(n\log n)\) 计算,也可以数论分块+类欧几里得 \(O(\sqrt n\log n)\)

注意跳相同方向的链需要倍增地跳,复杂度 \(O(n+\sqrt n\log^3 n)\)

23 ARC149F Rational Number System

建立所有数的 trie 树,与上一题类似地在 trie 树上遍历。

二分走哪个儿子,问题转化为 \([l,r]\) 子树大小之和,这个枚举一下深度就做完了。

24 P8258 [CTS2022] 独立集问题

注意到某个位置操作了之后,我们可以给它再操作一次来取反。于是问题可以刻画成:操作一个点,就将它的点权减它附近的点的点权和的绝对值(由于答案是求最大值,这个绝对值可以拆)加入答案,并把操作到的点的点权归零。

这样就可以直接 dp 了,细节较多。

24 P8860 动态图连通性

先离线,原问题等价于一个最短路,其中第 \(i\) 次操作被删除的边赋权 \(2^{q-i+1}\)(有多次操作只考虑第一次),其余赋权 \(0\)

直接 dijkstra,使用主席树维护即可做到 \(O(n\log n)\),但空间不优秀,也不优美。(类似 CF464E)

事实上这题是比 CF464E 弱的,因为非零边权互不相同,也就是说不会出现“进位”的情况。

主席树的作用主要是比较 \(dis_{s_1}+w_1\)\(dis_{s_2}+w_2\) 的大小,不妨令 \(dis_{s_1}<dis_{s_2}\),那么 \(dis_{s_1}+w_1>dis_{s_2}\)。(否则我们都不需要考虑 \(s_2\)

于是 \(w_1\) 一定是加在了 \(lcp(dis_{s_1},dis_{s_2})\) 中的某个 \(0\) 上,那么若 \(w_2\leqslant w_1\),则 \(dis_{s_2}+w_2\) 更小,否则 \(dis_{s_1}+w_1\) 更小,也就是我们只需比较最后一步的边权。(若边权相同,此时 \(d_i=0\),我们可以任意处理)

于是做到了线性空间,以及极低的实现难度。

25 ABC279Ex Sum of Prod of Min

这个 \(\min\) 对应的 GF 可以直接列出:(一个差分状物)

\[F_t(x)=\sum_{i}\min(t,i)x^i=\frac{x-x^{t+1}}{(1-x)^2} \]

答案即:

\[[x^m]\prod_{i=1}^n\frac{x(1-x^i)}{(1-x)^2}=[x^{m-n}](1-x)^{-2n}\prod_{i=1}^n(1-x^i) \]

由于 \(m-n\leqslant n\),所以求积式的上界可以忽略,此时我们应用五边形数定理:

\[[x^{m-n}](1-x)^{-2n}\sum_k(-1)^kx^{\frac{k(3k\pm 1)}{2}} \]

右边只有 \(O(\sqrt n)\) 项,枚举一下,左边 \(O(1)\) 提取系数就好了。

26 ABC275Ex Monster

建出笛卡尔树,一次操作只会操作笛卡尔树的一棵子树。

\(F_u(x)\) 表示 \(u\) 子树中,操作到最大值为 \(x\) 的最小代价:(特判掉叶子)

\[F_u(x)=\min_{y\geqslant \max(A_u,x)}\{B_u(y-x)+\sum_{v\in son(u)}B_v(y)\} \]

归纳可知 \(F_u\) 凸,使用 slope trick,仅维护斜率变化点以及变化量。

先将儿子的 \(F\) 加起来,然后分阶段完成转移:

\[F_u(x)\leftarrow F_u(x)+B_ux\\F_u(x)\leftarrow \min_{y\geqslant \max(A_u,x)} F_u(y)\\F_u(x)\leftarrow F_u(x)-B_ux \]

第一、三步只需插入斜率变化点,第二步将 \(<A_u\) 的斜率变化点、以及斜率小于 \(0\) 的一段前缀拍平。

使用左偏树维护即可做到 \(O(n\log n)\)


【星尘infinity】零重祈愿

草,大意了,下午晚上都在摆。

27 P7605 [THUPC2021] 小 E 爱消除

比较简单,列出区间 dp,讨论左端点与哪个位置匹配,这样转化为“\([l_1,r_1],[l_2,r_2]\) 这些球消掉需要的最小栈大小”,这也可以区间 dp 解决。

复杂度是 \(O(n^6)\) 的,但是注意到很多情况都不合法,出题人表示其有 \(\frac 1{720}\) 的常数。

28 loj#6610. applese 爱数图

考虑将整张图分解成 \(k\) 个点双 \(S_{1,2,\cdots,k}\),记 \(G\) 的生成树个数为 \(F(G)\),有:

\[F(G)=\prod_{i=1}^kF(S_i) \]

简单地考察某一个点双的 \(F\) 值:

  • \(|E|=|V|\),此时一定为圈,\(F(G)=|V|\)
  • \(|E|=|V|+1\),此时一定为圈上任选两个点连一条路径,此时有两个三度点,记三条路径长度分别为 \(a,b,c\),那么 \(F(G)=ab+bc+ac\geqslant 3n-4\)。(\(a=1,b=2,c=n-2\)
  • \(|E|>|V|+1\):这个我还不会证,反正其 \(F\) 值也不少于 \(3n-4\)

因此,一个非平凡点双(\(|V|>1\))的贡献一定 \(\geqslant 3\),因此最多有两个非平凡点双。

那么开始分讨:

不存在非平凡点双:此时是一棵无根树,\(n^{n-2}\)

一个非平凡点双:

  • 圈:直接计算圆排列,\(\frac{(n-1)!}{2}\)
  • 非圈:此时 \(22\geqslant F\geqslant 3n-4\),那么 \(n\leqslant 8\),暴力枚举所有不超过 \(8\) 个点的无向图即可。

得到这个点双后,我们只需与其余的点组合起来,通过 prufer 序列“图联通方案数公式”,贡献即 \(n^{n-|V|-1}|V|\),带上一个组合数选出这些点。

两个非平凡点双:

我们可以直接枚举两个点双,计算组合在一起的方案数。观察到两个点至多有一个公共点,分讨计算即可。

复杂度其实不是很重要,大概是 \(O(k^2\log n+k^4)\)

29 P5538 【XR-3】Namid[A]me

比较套路?

首先注意由于模数较小,可以通过预处理离散对数做到 \(O(1)\) 快速幂。

一个直接的想法是点分治,根据经典结论,一条链上,左端点到任意点的 \(f\) 值只有 \(\log a\) 种。那么以分治重心为一端的 \(f\) 值只有 \(O(d\log a)\) 种。

不妨考虑暴力枚举两种 \(f\) 值拼起来,这样的复杂度是 \(O(\min((d\log a)^2,n^2))\leqslant O(\sqrt{(nd\log a)^2})=O(nd\log a)\) 的。

事实上你回过头看,这个点分治的结构是毫无必要的,我们只是根据习惯使用了这一手段,把每条路径在 lca 处计算也是等价的。

另一种处理方式是将每个叶子依次设为根,根据经典结论,任意路径都会至少一次作为直链出现。尝试在直链的底端统计路径,即统计“在以 \(d_i\) 为根时是直链,以 \(d_{1\cdots i-1}\) 为根时不是直链”的路径。

假设路径 \(u\rightarrow v\) 被统计到了(\(u\) 是祖先,令 \(w\)\(u\)\(v\) 路径上第二个点),那么 \(d_{1\cdots i-1}\) 一定都在 \(w\) 的子树内。于是我们对 \(u\) 的限制仅为“深度大于等于某个值”。转化为直链后使用上面的结论可以直接 \(O(nd\log a)\) 解决。

posted @ 2022-12-07 12:21  xiaoziyao  阅读(157)  评论(0编辑  收藏  举报