LCA笔记随性摘录1

问题:每个 \(1\sim n\) 的值可以放的位置是一个区间 \([L_i,R_i]\),有若干要求形如 \(i\) 必须放得比 \(j\) 前,给出一种可行的放成排列的方案。
解法:对于有限制的一对区间 \((i,j)\)\(j\) 的左端点和“\(i\) 的左端点 \(+1\)”取max,\(i\) 的右端点和“\(j\) 的右端点 \(-1\)”取min,这显然是不影响可解性的。然后直接按照经典贪心(顺序扫每个位置,将右端点最左的放过来)放即可自动满足限制。


有01串的处理方式:画出折线图。


一般来说,复杂度差若干log并不体现核心性质之差,核心性质影响在于多项式次数。


计数某个 起点/起点集合 可以生成的本质不同终点数:
这是一个大类,尝试做一个汇总?

T1 计数题
给定长度为 \(N\)\(01\)\(S\),你可以做若干个操作,形如将长度为 \(3\) 的子串变成它们的中位数(注意是变成一个数字),问可以得到多少个不同的串。
答案对 \(998244353\) 取模。
思路1:操作看作消除删东西 //这里需要回头来补
思路2:操作看作缩一个区间

T2 [ARC064F] Rotated Palindromes
状态抽象成图,但是此时起点是所有回文串形成的集合,注意到循环移位的映射是一对一可逆的,因此画出的图形成若干置换环。
trick:此时答案等于所有起点到下一个起点的距离之和。


调整法
将状态看作图上的点,对状态的调整则是状态间的连边。
若存在点出度为0,则最优解必然出度为0。
言外之意:出度为0的点未必最优,出度不为0的点必然不优。如果可以证明所有出度为0的点价值相等或者这样的点唯一,则由充分变为充要。


时间复杂度分析

\[T(n)=\sum_{i} T(a_{i}n)+O(n), s=\sum_i a_i \]

\[T(n)=\left\{ \begin{aligned} O(n),s<1 \\ O(n\log n),s=1 \\ O(n^{1+\epsilon}),s>1 \end{aligned} \right.\]


倍增后微调:倍增维护额外信息。 //不懂,有点谜语人


已知全局:递归/分治,未知全貌:倍增。


【MX-X20-T7】「FAOI-R7」子集乘积(subset)
特性:假设有两个互不相交的query,我们有能力在 将其变为两个相交的query 的同时,再多得到 1bit 的信息。因此考虑倍增的过程,大概会形如 \(n'=n+n+k\) 的形式,\(k\) 指的是求出 \(n\) 个 bit 所需的询问次数。


分形序列/fib 序列
CF177G2 Fibonacci Strings
定义斐波那契字符串为:
\(f_1=\)"a"
\(f_2=\)"b"
\(f_n=f_{n-1}+f_{n-2}(n>2)\)
例如,前五项斐波那契字符串为 "a", "b", "ba", "bab", "babba"。
\(m\) 次询问,第 \(i\) 次给出一个字符串 \(s_i\),问 \(s_i\)\(f_n\) 中的出现次数。

不知道怎么直接想到,可能可以打表吧。
称上文 \(s_i\)\(s\),也即每次询问独立计算。
先暴力处理,直到 \(|f_1|>=|s|\)
\(F_n=F_{n-1}+F_{n-2}+G_{n}\)\(G_n\) 表示在这一步合并出来的个数。记 \(L_i,R_i\in {1,2}\) 表示 \(f_i\) 完全展开成 \(f_1,f_2\) 的情况下,最左侧和最右侧的串是哪一个。
递推有 \(L_i=L_{i-1},R_i=R_{i-2}\),注意到 \(G_i=calc(R_{i-1},L_{i-2})=calc(R_{i+1},L_{i})=G_{i+2}\)。(calc 是计算越过这两个字符串的出现次数)
因此计算出两个本质不同 \(G\) 之后可以直接矩阵递推。

trick:fib相关的递推考虑跨步转移,不要只局限与最近的某一个。


倍增值域分块:核心在于 \(\frac{r}{l}\) 为某个常数。在网络流中的类似应用也被称为 scaling。
// 感觉忘记了,这里本应有很多例题的。


判断点是否在环路内部:引出一条任意的线,与环相交偶数次则不在内部,奇数次则在。

T1
网格图,格子的边界有正边权,格子的面内有正权值。找一条回路,最大化 边权之和 与 环内格子权值之和 的比值。
分数规划首选二分答案,然后考虑怎么求格子权值之和。
我们可以给每格向右引直线,给相交的边权值做改动;将每条竖向边拆分为向上和向下两个方向的有向边,向上的边权加上当前格子的权值,向下的减去。由于正好求的是最大环,环又有顺时针和逆时针两种,程序会自动选择贡献为正的那一种,不必担心将格子权值算成相反数的问题。

T2 P11810 [PA 2017] 商旅 / Osady i warownie
同样引出线来看。注意到定理对线的要求很低,只要连续且能延申到无限远处就可以。
此处维护时给每个点一个随机权值,设所有点权异或和为 \(sum\),然后并查集维护所有基本环的权值,看是不是只有 \(0\)\(sum\),维护方式就是点权向右引射线转成边权,点移动就把射线起点移动一下变成折线。


dp 的最本质:按照“对未考虑部分的影响”来划分“已考虑部分”的等价类。//非常重要!非常重要!

T1 P5307 [COCI 2018/2019 #6] Mobitel
显然要记当前所处的位置。影响之后能不能合法的是已经走过部分的积。我们反过来考虑计数不合法,由于接受状态判定是积 \(<n\),因此 \(\lfloor \frac{n}{v} \rfloor\) 相同的 \(v\) 对于以后接受不接受来说是无法区分的。

//例题还有很多,等想到了再列举。


给出一个集合,求子集和不能表出的最小数。
经典做法:给数排序,然后看当前数是否 \(\le ans\),是就 \(ans+=\) 当前数。
T1 P4587 [FJOI2016] 神秘数
此处有两种做法。
常见做法是主席树,维护“区间内 \(\le x\) 的数的和”,再不断令 \(x\leftarrow x+\operatorname{sum}([l,r],\le x)\),由于每次至少倍增,故一问至多做 \(\log V\) 轮,复杂度 \(O(n\log V+q\log^2 V)\)

这里可改用值域分块。将值域划分为 \([1,1],[2,2],[3,4],[5,8],[9,16],\dots\),则若当前 \(x\) 能取到某块中的一个数,便一定能取到该块内所有数,因此每块只需维护区间最小值与区间和。询问时从小到大扫描各块:若该块最小值 \(\le x\),就将整块区间和加入 \(x\);否则直接停止,答案即为当前 \(x\)。每层用前缀和配合 \(O(n)\)-\(O(1)\) RMQ 维护,故总复杂度为 \(O(n\log V+q\log V)\)


网络流核心:一个点的出流=入流。 //不是很有深刻理解。
从线性规划的角度发现这是网络流题:约束线性(线性不等式),每个变量只出现在不超过两个约束中。


方案结构:调整,生成,局部,差分。 //又是谜语人


求解无向图的圈空间是容易的(所有非树边就代表一个基本圈)。
求解有向图的圈空间困难。


最小割建模:

  1. 取值型,有若干变量以及离散的取值。建模方式:一个变量一条链,共 \(n\) 条链;对于一条链来说,第 \(i\) 个点代表离散取值排序后的第 \(i\) 项,割掉 \(i\)\(i+1\) 的边代表取了 \(i\) 处的值。\(s\) 连向所有链的起点,所有链的终点指向 \(t\)。 //可做的限制类型?例题等待补充。
  2. 划分型(经典最小割建模),一个元素一个点,\(s\) 指向所有元素点,所有元素点指向 \(t\)。跑完了和 \(s\) 连通的就是选了,否则没选。

平面图最小割=对偶图最短路。


用最少修改将一个括号串改为合法?
性质:如果存在修改')'在'('的左边,那么将其变成'('和')'一定不劣。这样的修改会停止。
因此,最优解的修改形式必然形如 ((())))),此处任意两个括号之间可以插入不修改的位置。
例题:LCAOJ T251225A
现在给你一个括号序列。每个括号要么是左括号,要么是右括号。所有括号都被染了颜色,每个括号被染了以下 \(3\) 种颜色中的一种:红色、绿色和蓝色。
你现在可以把某些位置的括号从左括号变成右括号,或者从右括号变成左括号。你不允许改变括号的排列顺序,也不允许改变括号的颜色。现在,你可以用零次或多次的修改操作,使得最终的括号序列同时满足以下两个条件:

  1. 如果去掉所有的红色括号,剩下的括号构成一个合法的括号序列。
  2. 如果去掉所有的绿色括号,剩下的括号构成一个合法的括号序列。

一个括号序列 \(S\) 是合法的当且仅当它满足条件之一:

  • \(S\) 为空。
  • 存在两个合法的括号序列 \(X, Y\),使得 \(S = XY\)
  • 存在一个合法的括号序列 \(X\),使得 \(S = (X)\)。请注意,在这种情况下,最左的左括号和最右的右括号可以是不同颜色的。

问是否存在一种修改方案?若存在,最少的修改次数是多少?

//本题题解待补。


拆绝对值技巧:\(|x-y|\) 可以写作 \(\max(x-y,y-x)\)。如果询问的外层也是 max 的话,就可以直接脱掉里面的 max,得到优化。


等价类思想:从大小关系来说,在 \(k\) 维直线上,\(B\) 个点可以划分出 \(O(B^k)\) 个等价类。 //同样需要例题。
T1 P10436 卡牌收集

T2 LCAOJ T251225C
你在焊接电路板,电路板在二维平面直角坐标系上,上面有 \(n\) 个端口,坐标均为整数,记为 \((x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)\)

你有 \(m\) 个元件,坐标分别为 \((x'_1, y'_1), (x'_2, y'_2), \dots, (x'_m, y'_m)\)。并且,\(i\) 号元件的效用为 \(w_i\)(可以是负数)。

每个元件可以连接一对输入端口和输出端口,如果 \(i\) 号元件的输入端口是 \(u_i\) 号,那么输出端口就必须是 \((u_i \bmod n) + 1\) 号。所有连接了端口的元件的输入端口 \(u_i\) 必须两两不同,不过一个端口可以既是一个元件的输入端口又是另一个元件的输出端口。

你需要任选 \(k\) 个元件并指定它们连接的输入输出端口。

对于一种方案,总效用为:

  1. 每个选取的元件分别连接到它的输入端口和输出端口,每一对连接点的效用为两点的曼哈顿距离,也就是横坐标差的绝对值加上纵坐标差的绝对值。
  2. 每个端口 \(i\) 如果不是某个元件的输入端口,则连接到它循环相邻的下一个端口 \((i \bmod n) + 1\) 号。这对连接的效用仍然是两点的曼哈顿距离。

总效用等于所有选取的元件的效用之和加上所有连接的效用之和。

现在你需要对每个元件个数 \(k\) 求出所有可能方案中最大的总效用。

//题解待补。

posted @ 2026-04-23 15:59  murder_drones  阅读(19)  评论(0)    收藏  举报