3 月做题记录
1 CF1824D
扫描线一下线段树维护历史和。
2 QOJ1178
如果不是环而是链大家都会做,若干区间两两有交不难说明这些区间整体交非空,枚举交点位置即可。
对于环,考虑将其视为一条链,将开头和结尾连在一起。每段弧对应序列一个区间或者一个前缀与后缀的并,我们分别称其为一类弧和二类弧。
注意到一类弧上的问题等价于一条链,所以他们的交集必然非空,不妨假设都共用点 \(i\)。
枚举点 \(i\),考虑将所有弧形态:
- 一类弧,不包含点 \(i\),称之为 A。
- 一类弧,包含点 \(i\),称之为 B。
- 二类弧,不包含点 \(i\),称之为 C。
- 二类弧,包含点 \(i\),称之为 D。
A 类弧没有意义,因为要求所有一类弧必定包含 \(i\)。
D 类弧必选,因为所有 D 类弧之间互相有交,且所有 D 类弧与所有一类弧有交。
B 类弧和 C 类弧之间不一定有交,而 B 类弧和 C 类弧内部两两有交。对于 B 类弧 \(i\) 和 C 类弧 \(j\),若 \(i,j\) 之间有交则连边,问题变为求二分图的最大团,其中假定左侧和右侧是完全图。问题等价于求补图的最大独立集,等于点数减最大匹配。直接跑最大匹配算法总复杂度至少为 \(O(n^3)\),无法通过。
考虑本质是在干什么。有若干一类弧 \([l_i,r_i]\) 和若干二类弧 \((-\infty,a_j]\cup [b_j,+\infty)\),两个弧之间有边当且仅当没有交,求此二分图的最大匹配。而 \([l_i,r_i] \cap \left((-\infty,a_j]\cup [b_j,+\infty)\right) = \varnothing \iff [l_i,r_i] \subseteq [a_j+1,b_j-1]\)。
问题变为左右有若干区间,连边当且仅当左侧区间包含于右侧区间,求最大匹配。贪心算法是,将右侧区间按照右端点从小到大排序依次考虑每个区间 \([l,r]\),每次找到包含于其的左侧区间中左端点最小的区间匹配。
总复杂度 \(O(n^2 \log n)\)。
3 《浅谈一些二分图匹配相关问题》3.3
给定 \(n\) 个区间 \([l_i,r_i]\) 和 \(n-1\) 个点 \(x_i\),\(q\) 次独立询问,每次给定 \(y\),令 \(x_n=y\),然后询问点和区间是否有完美匹配。点和区间有连边当且仅当点包含于对应区间。
首先有 \(O(nq \log n)\) 的贪心算法,求解此类最大匹配可以直接贪心,将区间按照右端点从小到大排序依次考虑每个区间,每次选择包含于区间的没有被选的点中最小的点进行匹配。
考虑对 \(n-1\) 个点直接按照这个方式进行贪心,最终会存在一个区间 \([l_i,r_i]\) 无法找到对应匹配点,则必定要求加入的 \(y \leq r_i\),反之必然没有完美匹配。然后把这个区间删掉,如果后面可以匹配则确定 \(y_{\max} = r_i\),否则不存在合法的 \(y\)。
另一方面,也可以按照左端点从大到小贪心,同理可确定 \(y_{\min}\)。
我们声称 \(y \in [y_{\min},y_{\max}]\) 的所有 \(y\) 均符合要求。
只需要证符合条件的 \(y\) 是一个区间。众所周知在这个问题上的 Hall 定理只需要考虑所有区间 \([L,R]\),限制是包含于 \([L,R]\) 的左侧区间 \([l_i,r_i]\) 数量小于等于 \(x_i \in [L,R]\) 的右侧点数量。向右侧加入一个点 \(y\) 对每个区间 \([L,R]\) 的变化量不超过 \(1\),不难看出 \(y\) 只需要在所有不合法区间交内即可符合条件。
4 CF1718D
两个排列符合要求当且仅当笛卡尔树相同。每个点 \(i\) 可以算出 \(a_i \in [l_i,r_i]\),套用 \(3\) 的算法即可。
5 ARC147E
考虑序列 \(x_1,\cdots,x_m\) 与 \(y_1,\cdots,y_m\),能将 \(x\) 重排使得 \(x_i \geq y_i\) 当且仅当 \(\forall k \in \mathbb{Z}: \sum \limits_{i=1}^m [x_i \geq k] \geq \sum \limits_{i=1}^m [y_i \geq k]\),通过 Hall 定理易证。
也就是说考虑无限长序列初始全为 \(0\),对于每个 \(x_i\) 将 \((-\infty,x_i]\) 加 \(1\),对于每个 \(y_i\) 将 \((-\infty,y_i]\) 减 \(1\),要求所有位置非负。
所有 \(a_i < b_i\) 的位置必选,然后存在一些 \(a_i \geq b_i\) 的位置也要选,会将 \((b_i,a_i]\) 区间加 \(1\)。
每次取出最靠左的负数位置,选择包含其的右端点最大的未被选过的区间做区间加 \(1\) 即可。复杂度 \(O(n \log n)\)。
6 P8527
分块,然后不难变成差卷积,NTT 一下。
复杂度 \(O(mB+\dfrac{mn}{B}+\dfrac{n^2\log n}{B})\)。取 \(B=O(\dfrac{mn+n^2\log n}{m})\),最优复杂度 \(O(n\sqrt{m\log n})\)。
7 P15583
这么牛。
考虑 \(l=r\) 怎么做。删边离线下来做线段树分治即可。
我们观察线段树分治的本质结构。删边通过离线转化为了存活时间段,将存活时间段挂在线段树上,每个叶子的信息是根到叶子的路径信息并,通过从根开始 DFS 将问题变为插入和撤销。
\(l \neq r\) 时,一个显然想法是找到 \(l\) 和 \(r\) 对应叶子在线段树上的 LCA,其实就是猫树分治。对于这个 LCA,设其区间为 \([L,R]\),中点为 \(mid\),\([l,r]\) 可以被拆为 \([l,mid] \cup (mid,r]\)。根据叶子到根信息的结构,LCA 与其任意祖先上的边都必定会被加入。在仅加入这些边的情况下,图构成了若干连通块。LCA 子树内的加边会涉及若干连通块合并。若某个连通块在子树加边后并没有发生合并,那么这个连通块完全可以被忽略,涉及其的询问不难计算答案。故我们只关心这些重要的连通块。线段树上所有重要的连通块个数是 \(O(\sum |E_i| \log n)\) 的,因为每条边只会贡献到树上其所有祖先。
考虑询问 \(x,l,r\),一个 \(y\) 符合条件当且仅当 \([l,r]\) 时刻内,\(x\) 和 \(y\) 均处于同一个连通块内。对连通块标号,那么 \(y\) 符合条件当且仅当 \(x\) 和 \(y\) 在 \([l,r]\) 内所有标号对应相等。
注意到一个关键连通块的标号可以从儿子标号继承过来,所以这个做法看起来是有前途的。考虑深入刻画一下这个结构。
首先将 \([l,r]\) 拆成 \([l,mid]\) 和 \((mid,r]\),限制变为 \(s_x[l \cdots mid] = s_y[l \cdots mid]\) 与 \(s_x(mid\cdots r] = s_y(mid\cdots r]\)。将前后缀相等转化为 LCP 和 LCS,根据后缀数组理论只需要考虑排序后相邻的 LCP 和 LCS,对于线段树上每个区间 \([a,b]\) 将其所有连通块按照 \(s_x[a \cdots b]\) 与其反串分别按照字典序排序,然后求出相邻 LCP,对于 \([l,mid]\) 和 \((mid,r]\) 分别是两个可行区间,做一个二维数点即可解决原问题。
现在问题转化为对于线段树每个区间 \([a,b]\),将所有重要连通块 \(x\) 按照 \(s_{x}[a \cdots b]\) 排序,并支持求两个不同连通块的 \(s_{x}[a \cdots b]\) 的 LCP。反串和 LCS 同理。
显然 \(s_x[a\cdots b]\) 是通过左右儿子拼接所得,如果其在左右儿子中并非重要连通块,那么直接加入 \(len\) 个 \(x+n\)。然后直接做双关键字排序即可。
LCP 是简单的,根据上述比大小的方式直接在线段树上走即可。
总复杂度是两个 \(\log\)。
8 P15585
Lemma:
对于区间 \([l,r]\):
令 \(S := \bigcup \limits_{i=l}^r [A_i,B_i)\) 以及 \(T:=\bigcup \limits_{i=l}^r \{B_i\}\)。
其为绝妙区间等价于 \(S \subseteq T\)。
Proof:
易证。
\(\square\)
按照 \(r\) 扫描线,对于每个 \(i\) 记 \(d_i\) 为最大的 \(x \in [1,r]\) 使得 \(B_x = i\),\(c_i\) 为最大的 \(x \in [1,r]\) 使得 \(i \in [A_x,B_x)\),在 \(r\) 处询问 \(l\) 等价于判断是否存在 \(i\) 使得 \(c_i \geq l\) 且 \(d_i < l\),\(r \gets r + 1\) 等价于对 \(c\) 做区间覆盖和对 \(d\) 单点修改。
对 \(d\) 维护单点修改区间最小值,对 \(c\) 的区间覆盖做颜色段均摊,另外维护一个 \(f_i\) 表示 \(c_x \geq i\) 中 \(d_x\) 的最小值。但是由于按 \(r\) 正向扫描线对 \(d\) 的修改是变大,所以需要线段树每个点维护一个 set。复杂度 \(O((n+q)\log n\log V)\)。
9 P15587
考虑比较 \(a_x\) 和 \(a_y\) 的大小关系。不难注意到只需要一个形如菊花的东西,即有一个中心点 \(u\),与所有 \(\neq x\) 且 \(\neq y\) 的直接相连,然后连边 \((u,x),(x,y)\),大概率最大权独立集没有选 \(u\),此时可以直接确定 \(a_x,a_y\) 大小关系,否则意味着 \(a_u \geq \sum \limits_{i \in [n]\setminus \{u,x,y\}} a_i\),取任意一个 \([n] \setminus \{u,x,y\}\) 内的作为中心点再询问一次即可。
进一步可以并行比较若干对 \((x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\),要求每个数在所有二元组中最多出现一次。只需要 \(u\) 外面挂长度为 \(2\) 的链做类似的操作即可。
初始选定两个中心备选点 \(1\) 和 \(2\),对 \([3,n]\) 可以做并行比较,最多一次操作花费在中心点切换上。
现在考虑先对 \([3,n]\) 内的所有数排序,支持并行比较。这个问题等价于得到一个深度较小的 Sorting Network。存在深度为 \(O(\log n)\) 的 Sorting Network,但常数过大且结构繁琐一般仅用于理论研究。
更简单的存在一个深度为 \(O(\log^2 n)\) 的 Sorting Network,进一步其深度为 \(\dfrac{\log n(\log n + 1)}{2}\),其名为 Bitonic Sorting Network。
其大致过程如下:
定义:一个序列是 Bitonic 序列当且仅当其存在一个循环移位满足其先单调不降后单调不升,即其存在一个循环移位满足存在一个位置使得将这个位置劈开后前缀单调不降后缀单调不升。
Lemma:
可以 \(O(\log n)\) 次并行比较将一个 Bitonic 序列排序为单调不降序列。
Proof:
取 \(d = \lfloor \dfrac{n}{2} \rfloor\),比较 \((1,d+1),(2,d+2),\cdots,(d,2d)\),每一次比较若前者大于后者则交换。不难说明此时前半部分和后半部分均为一个 Bitonic 序列,递归成两个规模为 \(\dfrac{n}{2}\) 的子问题求解即可。
操作次数满足 \(T(n)=1+T(\dfrac{n}{2})\),故 \(T(n)=O(\log n)\)。
\(\square\)
对于长度为 \(n\) 的序列排序,先将前一半递归按照非递减排序,后一半递归按照非递增排序,将两部分拼接得到了一个 bitonic 序列,按照上述方法合并。对 \(n\) 个数排序的次数满足 \(T(n)=O(\log n)+T(\dfrac{n}{2})\),得 \(T(n)=O(\log^2 n)\),进一步可以确定操作次数恰为 \(\dfrac{\lceil \log_2 n\rceil(\lceil \log_2 n\rceil+1)}{2}\),计算可得操作次数为 \(55\)。加上一次额外的切换中心点,需要 \(56\) 次操作。
剩余问题是将 \(1\) 和 \(2\) 插入序列中,由于 \([3,n]\) 顺序已确定,切换中心点所需额外次数是不必要的。直接两次二分需要 \(2\log n\),显然这样的二分也可以并行,故我们在 \(\dfrac{\lceil \log_2 n\rceil(\lceil \log_2 n\rceil+1)}{2}+\lceil \log_2 n\rceil + O(1)\) 次询问内解决了原问题。
10 P15653
取原图的补图,相当于要求最后边数最小。
Lemma:
若简单无向图 \(G=(V,E)\) 满足 \(2 \mid |E|\) 且 \(\forall i \in V: 2 \mid deg_i\),则对于任意给定的 \(k \in [2,|V|-2]\),每次选取一个 \(S \subseteq V\) 使得 \(|S|=k\),将 \(S\) 内两两点对之间的边状态取反,经过若干次操作后必然可以使得 \(E = \varnothing\)。
Proof:
\(k=2\) 时显然。
当 \(k>2\) 时,考虑四个不同的点 \(a,b,c,d\) 以及任意 \(u_1,u_2,\cdots,u_{k-2}\) 两两不同且 \(\forall i \in [1,k-2]: u_i \in ([|V|]\setminus \{a,b,c,d\})\)。由于 \(k-2+4=k+2 \leq |V|\),故 \(u_1,u_2,\cdots,u_{k-2}\) 必然存在。
依次进行操作 \((u_1,u_2,\cdots,u_{k-2},a,b),(u_1,u_2,\cdots,u_{k-2},b,c),(u_1,u_2,\cdots,u_{k-2},c,d),(u_1,u_2,\cdots,u_{k-2},d,a)\)。
观察图发生的变化,不难看出只有边 \((a,b),(b,c),(c,d),(d,a)\) 的状态发生了变化。故只要 \(k\in[2,|V|-2]\),经过四次操作可以将一个四元圈状态取反。
接下来证明边数为偶数且每个点度数为偶数的简单有限无向图 \(G=(V,E)\) 可以被表示为有限个四元圈的对称差。直接给出构造:
不失一般性假设 \(deg_1=0\),否则由于 \(2 \mid deg_1\),将 \(1\) 的邻居两两配对并每次构造一个四元圈即可使得 \(deg_1=0\),且操作后图仍符合原限制。
\([n]\setminus \{1\}\) 的每个连通块均存在欧拉回路。考虑每个大小大于 \(1\) 的连通块,取出其一个欧拉回路,将不同连通块的欧拉回路拼接在一起,合并两个连通块的欧拉回路只需要任取两个连通块内的两条边,与四元圈做对称差。
现在得到了一个经过所有边的欧拉回路为 \(v_1,v_2,\cdots,v_{l-1},v_l,v_1\),因为 \(2 \mid |E|\) 所以 \(2 \mid l\)。考虑对于所有奇数 \(i \in [1,l]\) 进行四元圈操作 \((1,v_i,v_{i+1},v_{i+2})\),其中 \(v_{n+1}=v_1\),不难验证操作后 \(E = \varnothing\)。
\(\square\)
当 \(k-1\) 为奇数时,考虑对于两个不同的点 \(u,v\),以及 \([|V|] \setminus \{u,v\}\) 内的 \(k-1\) 个不同点 \(x_1,x_2,\cdots,x_{k-1}\),依次执行 \((u,x_1,x_2,\cdots,x_{k-1})\) 和 \((v,x_1,x_2,\cdots,x_{k-1})\),会将 \(u,v\) 度数奇偶性取反,其余点度数奇偶性不变,并更改了 \(2(k-1)\) 条边的状态,不改变边数奇偶性。故 \(2 \mid k\) 时我们不关心点度数奇偶性。
当 \(\dfrac{k(k-1)}{2}\) 为奇数时,进行一次操作会改变边数奇偶性。此时要求 \(k \equiv 2 \pmod 4\) 或 \(k \equiv 3 \pmod 4\)。注意到 \(k\equiv 2 \pmod 4\) 时由于 \(2 \mid k\),我们可以任意更改点度数奇偶性,故操作不会影响度数奇偶性。而 \(k \equiv 3 \pmod 4\) 时有 \(2 \nmid k\),取反一个 \(K_k\) 会导致其上每个点向外的 \(k-1\) 条边状态取反,而 \(2 \mid k-1\),故不改变度数奇偶性。
也就是说,\(2 \mid k\) 时我们可以忽略度数奇偶性限制,而 \(k \equiv 2 \pmod 4\) 或 \(k \equiv 3 \pmod 4\) 时我们可以忽略边数奇偶性限制。
对 \(k \bmod 4\) 分类讨论:
- \(k \equiv 0 \pmod 4\):此时我们只关心边数奇偶性。若 \(2 \mid |E|\) 则最终可以操作至 \(E = \varnothing\),否则由于总边数奇偶性永远不变,最终必然有 \(|E|=1\),只需要将 \(E\) 的某条边状态取反后进行构造即可。
- \(k \equiv 1 \pmod 4\):此时边数奇偶性永远不变且每个点度数奇偶性永远不变,将度数为奇数的点两两匹配。然后若图边数为奇数则将一个三元圈取反即可。容易说明这达到了答案下界。
- \(k \equiv 2 \pmod 4\):度数和边数奇偶性限制均可忽略,最终可以使得 \(E=\varnothing\)。
- \(k \equiv 3 \pmod 4\):此时我们只关心每个点度数奇偶性,将度数为奇数的点两两匹配即可。
如此我们已经确定了答案,接下来证明存在操作次数不超过 \(\dfrac{n(n-1)}{2}\) 的构造。
Theorem:
存在操作次数不超过 \(\dfrac{n(n-1)}{2}\) 的构造使得操作结束后 \(|E|\) 达到了下界。
Proof:
令 \(n=|V|\)。
对于相同的 \(k\) 对 \(n\) 归纳说明。
当 \(n=k+2\) 时,注意到大小为 \(k\) 的 \([n]\) 的子集只有 \(\dbinom{n}{n-2}=\dbinom{n}{2}\) 个,显然操作无序且每个相同子集最多被操作一次,故按照上述分类讨论加边构造后一定可以得到操作次数不超过 \(\dfrac{n(n-1)}{2}\) 的构造。
否则 \(n>k+2\),考虑将 \(n\) 号点的所有出边删去,且操作次数不超过 \(n-1\)。
- \(2 \mid deg_n\):将 \(n\) 的邻居两两匹配,对于每一对 \((u,v)\),操作 \((x_1,x_2,\cdots,x_{k-2},u,n)\) 与 \((x_1,x_2,\cdots,x_{k-2},v,n)\),则 \((u,n),(v,n)\) 均被删去。
\(x_1,x_2,\cdots,x_{k-1}\) 度数奇偶性均不变。\(2 \mid k\) 时不需要考虑度数奇偶性限制,\(2 \nmid k\) 时 \(u,v\) 度数奇偶性不变。\(k \equiv 2 \pmod 4\) 或 \(k \equiv 3 \pmod 4\) 时不需要考虑边数奇偶性限制,\(k \equiv 0 \pmod 4\) 或 \(k \equiv 1 \pmod 4\) 时边数奇偶性不变。 - \(2 \nmid deg_n\):此时必然有 \(2 \mid k\),根据上文可以调整 \(n\) 的度数奇偶性。为了使得操作次数不超过 \(n-1\),在选取 \(x_1,x_2,\cdots,x_{k-1}\) 时尽量使 \(deg_n\) 变小。不难说明可以构造使得操作次数不超过 \(n-1\)。
故问题在不超过 \(n-1\) 次操作的情况下缩减为了规模为 \(n-1\) 的子问题。根据归纳假设原命题得证。
\(\square\)
原问题得以彻底解决。直接模拟即可。
11 圈消去定理
Theorem:
对于拟阵 \((S,E)\) 和其上两个不同圈 \(C_1,C_2\) 以及 \(e \in C_1 \cap C_2\),存在圈 \(C_3 \subseteq C_1 \cup C_2 \setminus \{e\}\)。
Proof:
即证 \(C_1 \cup C_2 \setminus \{e\} \notin E\)。
反证,若 \(C_1 \cup C_2 \setminus \{e\} \in E\)。
考虑某个 \(x \in C_1 \setminus C_2\),显然这样的 \(x\) 一定存在,否则 \(C_1 \subseteq C_2\) 与圈基本性质矛盾。
考虑 \(C_1 \cup C_2\) 中包含 \(C_1 \setminus \{x\}\) 的最大独立集,设其为 \(Z\)。显然有限制 \(C_1 \nsubseteq Z\) 且 \(C_2 \nsubseteq Z\),故 \(x \notin Z\) 且 \(C_2 \nsubseteq Z\),故 \(|Z| \leq |C_1 \cup C_2| - 2\),而根据拟阵性质,\(|Z| \geq |C_1 \cup C_2 \setminus \{e\}|=|C_1 \cup C_2| - 1\),矛盾。
故 \(C_1 \cup C_2 \setminus \{e\} \notin E\)。
\(\square\)
推论:
对于拟阵 \((S,E)\) 和其上一个基 \(I\) 和元素 \(e \notin I\),\(I\cup \{e\}\) 包含且仅包含一个圈。
Proof:
假设存在两个不同的圈 \(C_1,C_2\) 包含于 \(I \cup \{e\}\)。
显然 \(e \in C_1\) 且 \(e \in C_2\),根据圈消去定理存在圈包含于 \(C_1 \cup C_2 \setminus \{e\}\) 包含于 \(I\),和 \(I\) 是基矛盾。
\(\square\)
12 CF1381A2
做点简单构造。
从后往前将每个 \(a\) 变成对应的 \(b\)。要么直接操作一次前缀,要么先操作 \([1,1]\) 再操作这个前缀。总次数不超过 \(2n\)。
13 P3599
先考虑第一问。
Theorem:
有解当且仅当 \(2 \mid n\) 或 \(n=1\)。
Proof:
\(n=1\) 时显然有解。
若 \(n>1\) 且 \(2 \nmid n\),考虑记 \(S=\sum \limits_{i=1}^n i = \dfrac{n(n+1)}{2}\)。由于 \(2 \nmid n\) 所以 \(n \mid S\)。注意到排列中 \(n\) 所在位置的前缀和与其上一个位置的前缀和模 \(n\) 意义下总相同,故必然有 \(p_1=n\)。而显然有 \(n \mid s_n=\sum \limits_{i=1}^n p_i\),故 \(s_n = s_1\),与条件不符。
\(2 \mid n\) 时,考虑构造 \(n,1,-1,2,-2,\cdots\),模 \(n\) 意义下。不难证明其符合要求。
\(\square\)
考虑第二问。
Theorem:
有解当且仅当 \(n=1\) 或 \(n=4\) 或 \(n\) 为素数。
Proof:
\(n=1\) 时显然有解。
\(n=4\) 存在解 \(p=[1,3,2,4]\)。
对于一般的 \(n\),显然要求 \(p_1=1\) 和 \(p_n=n\)。此外,考虑 \(s_{n-1}=\prod \limits_{i=1}^{n-1} i\)。若 \(n \mid s_{n-1}\),那么 \(s_{n-1} \equiv s_n \equiv 0 \pmod n\) 与限制矛盾。故 \(n \nmid \prod \limits_{i=1}^{n-1} i\),要求 \(n\) 为素数或 \(n=4\) 或 \(n=1\)。
接下来给出 \(n\) 为素数的构造。
由于 \(n\) 是素数,考虑取出其一个原根 \(g\)。考虑 \(n'=n-1\) 的问题一构造得到的排列为 \(p'_1,p'_2,\cdots,p'_{n-1}\),模 \(n\) 意义下取 \(p_i = g^{p'_{i}}\) 以及 \(p_n = n\) 即得一组合法构造。
\(\square\)
14 ARC103D
首先不难求出重心,以其为根。注意到对于点 \(u\) 和其父亲 \(f\),有 \(D_u-D_f=n-2\times s_u\),\(s_u\) 表示点 \(u\) 子树大小。
按照 \(D_u\) 从大到小排序相当于得到了一个逐步删叶子的过程就做完了。
15 AGC030C
\(k \leq 500\) 时考虑构造 \(n=k\),第 \(i\) 行所有数都是 \(i\) 即可。
当 \(k >500\) 时,先考虑一个形如:
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
的结构。
显然其符合所有要求。
将每种颜色改为和某种新颜色交替出现,例如将 \(2\) 和 \(5\) 改为交替出现:
1 5 3 4
2 3 4 1
3 4 1 5
4 1 2 3
依然符合要求。
故可以构造到 \(k=2n\),问题解决。
16 P15761
这个题感觉是搞笑的。
sum hash,主席树上二分,复杂度 \(O(n \log n)\)。
17 QOJ3271
按 \(x\) 扫描线一下维护一些东西即可。
18 P15681
二分答案 \(x\),限制变为刻画前 \(x\) 里最多多少个以及最少多少个。在权值线段树上二分一下就行。
19 QOJ3270
子问题是经典贪心,结论是 \(a \leq b\) 按照 \(a\) 不降排序,\(a > b\) 按照 \(b\) 不增排序,从前往后选取容易确定答案。
原问题要做一个高维偏序,不太可能做得到。对原来时间轴动态加删点并按照排序范围做是相当困难的,考虑离线将所有点 \((a,b)\) 按照贪心顺序排序依次加点。
按 \(B=\lfloor \log_2 n\rfloor\) 分块按照顺序加入所有点,每块内部可以 \(O(2^B)\) 计算每个子集答案,问题是如何将每个询问对应到查询子集。在值域上记录每个前缀的集合即可。询问直接查表,复杂度 \(O(\dfrac{n(n+q+V)}{\log n})\)。
20 P10871
不难。手玩一下可得 \(2 \nmid n\) 时可以做到 \(n^2\),\(n=2\) 时答案为 \(1\),其余偶数 \(n\) 答案为 \(n^2-2\)。对奇数 \(n\) 的构造是归纳一下,偶数的构造是奇数上微调。
21 QOJ7588
经典的树上贪心,维护并查集和优先队列每次选一个最优的和父亲合并即可。
22 QOJ7578
显然单独考虑每个子树,状态形如 \((u,d)\),表示在 \(u\) 的子树内,最上面 \(k\) 层被 ban 了。
对这个 DP,然后 \(d\) 不超过子树深度,长剖优化一下就好了。
23 QOJ7584
常见套路。
先二分答案 \(x\),即需要确定距离不超过 \(r\) 的球对数量和 \(k\) 的大小关系。
将每个球的半径增加 \(\dfrac{r}{2}\),即计算相交球对数量和 \(k\) 的大小关系。
现在问题转化为:
给定三维空间 \(n\) 个球 \((x_i,y_i,z_i,R_i)\),计算有多少对球有交,或确定对数大于 \(k\)。
不妨假设 \(R_1 \geq R_2 \geq \cdots \geq R_n\),令 \(d=2R_1\),将空间划分为 \(d \times d \times d\) 的立方体,注意到两个球有交的必要条件是其球心所在立方体距离不超过 \(2\)。
从前往后依次考虑每个 \(i\),对于当前的 \(i\),若 \(R_i \leq \dfrac{d}{4}\),则令 \(d=2R_i\) 并重构。重构会发生至多 \(O(\log R)\) 次。然后对于当前的 \(i\) 枚举其立方体邻居内所有点。可以分析出总复杂度不超过 \(O(n \log^2 R+n\sqrt{k} \log^2 R)\)。Official Tutorial 声称复杂度是 \(O(n \log^2 R+n\sqrt k \log R)\) 的,我没太想明白。
24 ARC125E
显然有一个网络流模性。连边 \((S,i,A_i)\),\((i,j,B_j)\),\((j,T,C_j)\)。答案即为最大流。
最大流等于最小割,刻画 \((S,i)\) 删的边集 \(T\),发现右侧答案只和 \(|T|\) 有关,枚举 \(|T|\),显然割掉的是权值最小的 \(|T|\) 条边,右侧的很容易维护。
25 ARC067C
调和级数 DP 一下就行了。
26 ARC158D
注意到两侧都是齐次多项式,且左侧是 \(3n+1\) 次,右侧是 \(3n\) 次。
随机取 \(x,y,z\),假设左侧结果为 \(a\) 右侧结果为 \(b\),如果 \(a,b \neq 0\),令 \((x',y',z')=(\dfrac{xb}{a},\dfrac{yb}{a},\dfrac{zb}{a})\) 大概率就是一组可行解。
随一次成功率可以分析出不低于 \(\dfrac{1}{4}-O(\dfrac{1}{p})\)。
27 P15650
呜呜呜。
考虑逐步在串 \(t\) 末尾加入字符,如何维护小于 \(s\) 的子串个数。
不难发现只需要记录目前 \(t\) 的最长后缀使得其为 \(s\) 的前缀,也就是 KMP 里的那个东西,以及记录有多少后缀已经小于 \(s\),就可以完成下一步转移。
也就是说,只需要记状态 \((l,c,w,0/1)\) 表示最长公共前后缀,目前有多少后缀小于 \(s\),目前小于 \(s\) 子串个数为 \(w\),目前是否包含 \(s\) 作为子串。
从初始状态 BFS 到 \((*,*,k,1)\),复杂度 \(O(nk^2)\)。
注意到 \(c\) 至少贡献 \(\dfrac{c(c+1)}{2}\) 个小于 \(s\) 的子串,故复杂度 \(O(nk\sqrt k)\)。
28 P15454
外邻域覆盖是没有用的,因为最终会有 \(a_{fa_i} \geq a_i\),所以问题等价于内邻域覆盖。
形式化考虑问题,即对每个点 \(i\) 覆一个权值 \(a_i\),要求 \(\forall i \in [1,n]: a_i \geq \sum \limits_{j \in son_i} a_j\) 且每个点 \(i\) 覆盖其 \(a_i - 1\) 内邻域后,不存在没有被覆盖的点,最小化 \(\sum \limits_{i} c_i(a_i-\sum \limits_{j \in son_i} a_j)\)。
直接 DP。\(f_{i,j,k}\) 表示以 \(i\) 为根的子树,\(a_i=j\),子树内最深的没覆盖的点深度为 \(k\) 时子树内的答案。注意到 \(j\) 不超过点 \(i\) 的子树大小,故 \(i,j\) 两维是树上背包的 \(O(n^2)\),而 \(k\) 这一维是取 \(\max\),对固定的 \(i,j\) 维护 \(f_{i,j,*}\) 的前缀最小值即可。总复杂度 \(O(n^3)\)。
29 P15455
考虑按照 Kruskal 方法依次考虑每条边并合并连通块 \(S,T\),算一下 \(i \in S\) 和 \(i \in T\) 分别的贡献即可。可以直接做启发式合并状物,或者把重构树建出来变成子树加。复杂度 \(O(m \log m)\)。
30 QOJ14141
容易归纳说明答案不超过 \(3\)。答案为 \(1\) 当且仅当树是一条链。故只需要判定答案是否为 \(2\)。
这个随便设计一下 DP 应该就行。
31 P14468
显然写成 DDP 形式上树做一下就行了。搞笑呢。
32 P12676
这个题想法很自然。显然 \(2 \nmid n\) 且 \(2 \mid m\) 时无解,\(n=1\) 也无解。否则只需要考虑 \(n=2\) 和 \(n=3\),\(n=3\) 时手玩一下很容易构造通解。
33 P14146
和 starmap 的 \(k=3\) 部分差不多,只考虑取反 \(K_3\) 可以做到取反任意一个圈,每一步花费不超过 \(9\)。有些点度数会是奇数,四个一组匹配取反一个 \(K_4\),可能会剩下两个,取反一个 \(K_6\) 再取反两次 \(K_4\) 即可。
34 P15815
考虑平面图欧拉公式,我们希望得到 \(|V|,|E|,|C|\),分别表示点数边数和连通块数。
\(|E|\) 直接计算,\(|V|\) 相当于计算有多少线有交,从上到下扫描线一下。\(|C|\) 困难一点,还是考虑从上往下扫描线,维护支持加删点的线段树优化建图,时空都是一个 \(\log\) 的。问题解决。
35 P15819
把树建出来,二分答案后问题相当于值域为 \(0,1\),直接在树上 DP 一下就行。大概是记 \(f_u\) 表示 \(u\) 子树结果为 \(1\) 至少要放几个 \(1\) 进去,转移很朴素。
36 P15725
看起来是把 AC 自动机建出来,询问在 Trie 上跳一跳之类的。
37 P14662
Lemma:
记 \(a_n = \bigoplus \limits_{i=1}^n i\),则 \(a_n = \begin{cases} n && n \equiv 0 \pmod 4 \\ 1 && n \equiv 1 \pmod 4 \\ n + 1 && n \equiv 2 \pmod 4 \\ 0 && n \equiv 3 \pmod 4 \end{cases}\)。
Proof:
注意到对于偶数 \(k\),有 \(k \oplus (k+1)=1\),据此易证。
\(\square\)
对于原题,有解当且仅当不存在 \(k \in \mathbb{N}^{+}\),使得 \(n=2^k\)。
Proof:
设图 \(G=(V,E)\),\(|V|=n\)。令 \(s_u:= \bigoplus \limits_{(u,v) \in E} s_v\)。
先说明 \(n=2^k\) 无解:
不难说明对于任意点 \(i\),若 \((i,n) \in E \iff s_i \geq 2^k\)。由于图连通故存在 \(i\) 使得 \((i,n) \in E\),故 \(\forall 1 \leq i < n: (i,n) \in E\)。而 \(s_n = a_{n-1} < 2^k\),无解。
接下来说明 \(n \neq 2^k\) 时有解。
\(n=1\) 时取 \(E = \varnothing\) 显然符合要求。
否则对 \(n \bmod 4\) 分类讨论:
- \(n \equiv 3 \pmod 4\):取 \(E=\{(1,i)\mid 2 \leq i \leq n\}\) 符合要求,因为对于所有 \(i \in [2,n]\) 均有 \(s_i=1\),而 \(s_1=a_n \oplus 1=1\)。
- \(n \equiv 1 \pmod 4\):取 \(E = \{(1,i) \mid 2 \leq i \leq n - 2\} \cup \{(n-1,i) \mid 1 \leq i \leq n - 2\} \cup \{(n,i) \mid 1 \leq i \leq n - 2\}\) 符合要求,因为 \(n-2 \equiv 3 \pmod 4\),在 \([1,n-2]\) 的诱导子图内有 \(s_i=1\) 恒成立,而 \(n \oplus (n-1) = 1\),故在图 \(G=(V,E)\) 中对于所有 \(1 \leq i \leq n - 2\) 有 \(s_i=1\oplus 1 = 0\),而 \(s_n = s_{n-1}=a_{n-2}=0\),故 \(s_1=s_2=\cdots=s_n\)。
- \(n \equiv 2 \pmod 4\):取集合 \(A=\{1,n\},B=\{2,n-1\},C=[3,n-2] \cap \mathbb{Z}\),取 \(E=(A\times B)\cup (A\times C)\cup (B\times C)\) 符合要求,其中 \(\times\) 表示笛卡尔积。原因是考虑 \(A,B,C\) 构成 \([1,n] \cap \mathbb{Z}\) 的划分,每个 \(s_i\) 等于 \(a_n\) 异或其所属集合所有数异或和。\(A\) 中异或和等于 \(1 \oplus n = n + 1\),\(B\) 中异或和等于 \(2 \oplus (n-1)=n+1\),\(C\) 中异或和等于 \(a_{n-2} \oplus 3=(n-2)\oplus 3=n+1\)。故 \(s_1,s_2,\cdots,s_n\) 均相等。
- \(n \equiv 0 \pmod 4\):令 \(h=\mathrm{lowbit}(n)\),即 \(n\) 在二进制表示下为 \(1\) 的最低位对应的 \(2^k\),取 \(A=\{n\}\),\(B=\{h,n-h\},C=V\setminus A\setminus B\),取 \(E=(A\times B)\cup (A\times C)\cup (B\times C)\) 符合要求。原因是 \(A\) 中异或和等于 \(n\),\(B\) 中异或和等于 \(n\),\(C\) 中异或和等于 \(a_n \oplus n \oplus n = a_n=n\)。故 \(s_1=s_2=\cdots=s_n\)。
\(\square\)
38 P15763
这也太难了。
直接的想法是连菊花造十组,每条路径两组之间连一下,\(8^{10}>10^9\) 所以八进制拆分,需要 \((8-1)\times 10+1=71\) 个点,过不去。
考虑这个过程的本质,初始有 \(B=10^9\),执行十次操作,每次选择 \(x\),令 \(B \gets \lfloor \dfrac{B}{x} \rfloor\),花费 \(x-1\)。要求最后 \(B=0\),问 \(\sum x-1\) 最小值。
对着直接做 DP 答案还是 \(71\),说明八进制拆分已经足够优秀了。调整一下参数可以发现可以在花费为 \(63\) 的情况下表示 \(4 \times 10^8\) 以内的所有数。考虑在中间加两个点,边权为 \(2 \times 10^8\),左侧连四组右侧连六组,先表示 \(x \bmod (4\times 10^8)\),多出来的一定是 \(4 \times 10^8\) 或 \(8 \times 10^8\),将左右两边路径在中间合并即可。总共 \(65\) 个点。
39 CF2057G
构造五个方案,集合大小之和不超过 \(s+p\),则根据鸽笼原理存在其中一组解大小不超过 \(\dfrac{s+p}{5}\)。
将网格图五染色,点 \((i,j)\) 染色为 \((i + 2j) \bmod 5\),注意到每个格子与其四连通的共五个格子颜色两两不同。
对于每种颜色 \(i\),将颜色为 \(i\) 的 # 格子选入,除此之外仍然会存在某些 # 格子不存在相邻被选,这样的格子必然处于边界,且其某个向外的方向上必然颜色为 \(i\)。
取遍 \(i\) 从 \(0\) 到 \(4\) 即构造了五个方案,方案大小和显然不超过 \(s+p\)。
40 P15869
将每个点邻边两两配对,要求不能存在某一对对应的邻居节点相同。有解当且仅当最大值不超过一半。构造出来后先跑一个欧拉回路然后重新调整每个点的出入边顺序即可。
41 P15891
枚举下面那条边,贡献对于上面那条边是一个一次函数形式,可以李超树做。限制深度相当于限制起点在一条链上,树剖一下,复杂度 \(O(n \log n \log V)\)。
42 P15849
最大区间一定是极大的,所以答案区间要么是 \([1,n]\),要么出现次数最大减最小必定恰好为 \(k\)。
如果只有两种数,改成 \(+1\) 和 \(-1\) 前缀和上做二维偏序就行。
现在相当于有 \(\dbinom{3}{2}=3\) 个前缀和。但根据上文所述,枚举答案右端点 \(r\) 后三个前缀和有一个确定,相当于只有两个序列,所以问题转化为询问矩形最小值,可以做到 \(O(n \log^2 n)\)。

浙公网安备 33010602011771号