EZEC R13 中文私货(有题解)
dead_X
2022-11-21 15:51:30
# EZEC R13 Chinese Editorial
## Two Permutations
如果 $a+b+2\leq n$,我们可以将中间 $(n-a-b)$ 个元素循环位移一次。
如果 $a+b+1\geq n$,可以证明两个排列是相等的,因此当且仅当 $n=a=b$ 有解。
![](https://s3.uuu.ovh/imgs/2022/11/21/c5f975d4a739ffe1.jpg)
外星怪马(pixiv id: 89647675)
## Elimination of a Ring
首先,如果给定的环形如 $[a,b,a,b,a,b,\cdots,a,b]$,答案为 $\frac{n}{2}+1$。
然后,我们可以通过归纳证明只要环有三种元素,答案一定为 $n$。
- 如果存在一种元素出现次数 $>1$ 且它两边的数不相同,只需要删去这个数即可。
- 如果存在一种元素出现次数 $=1$,我们只需要删去这个数右边的数即可。
不难发现只要环有三种元素,上述两种情况必定至少满足一种。
![](https://s3.uuu.ovh/imgs/2022/11/21/128c7ea6d0f1ebf7.jpg)
重炮(pixiv id: 88790337)
## Set Construction
- 做法 A(时间复杂度 $O(\frac{n^3}{w})$)
拓扑排序:初始时第 $i$ 个集合只包含第 $i$ 个点,暴力转移集合之间的关系即可。
- 做法 B(时间复杂度 $O(n^2)$)
转置输入的矩阵并输出。
不难发现所有约束一定形成树状关系,考虑一个元素的贡献即可。
![](https://s3.uuu.ovh/imgs/2022/11/21/56032f3fd1b40148.png)
乌拉拉(pixiv id: 89343331)
## Carry Bit
我们先列出不进位加法后的值,即每一位的值可以是 $0,1,2$。
考虑一个极长的进位链一定形如 $0,x_1,x_2,\cdots,x_n,2$,因此如果相邻两位一个进位,另一个不进,那么较高的位只有 $1$ 种方案。
枚举进位的段数即可。
![](https://s3.uuu.ovh/imgs/2022/11/21/b22c24337ed3b979.png)
二锅头(pixiv id: 94244450)
## Make It Connected
首先,如果图已经联通,答案为 $0$。
不然,如果图存在一个点度数为 $0$ 或存在一个连通块不是完全图,答案为 $1$。
不然,如果图有超过 $3$ 个连通块,答案为 $2$。
不然,答案为较小连通块的大小。
对于第二步,即找到一个非完全图连通块中的合法操作点有很多方法,这里列举几种:
- 方法 A
找到一个度数不是 $S-1$ 的非割点,其中 $S$ 为连通块大小。
- 方法 B
找到所有点中度数最小的点。
![](https://s3.uuu.ovh/imgs/2022/11/21/e3cd3d6994682463.png)
可爱铃鹿(pixiv id: 102293234)
## Anti-median
考虑先找出合法排列的充要条件再计数。
首先考虑 $n=3$,即 $a_2$ 要么是最大值,要么是最小值。
然后考虑 $n=5$,假设所有相邻的奇数位大于偶数位,则奇偶数位置分别需要满足单峰和单谷。通过一些归纳可以证明,这个条件已经是充分的了。
然后我们考虑从小到大填数,尝试模拟一个合法排列值域变大的过程:
![](https://cdn.luogu.com.cn/upload/image_hosting/5t4i60wg.png)
不难发现我们从 $1$ 所在的点开始,每次扩展都是向两侧扩展 $2$ 的长度,碰到边缘就反弹。
特别地,我们还需要保证任意时刻扩展的两个端点满足 $l\leq r$。
因此我们可以暴力地记 $f_{l,r}$ 为扩展到区间 $[l,r]$ 的方案数,时间复杂度 $O(n^2)$。
接下来是究极人类智慧:我们觉得 $l\leq r$ 这个条件和反弹加在一起不太好处理,我们直接将序列翻转后分别插入头部和尾部,这样就可以解决”反弹“的限制。
然后我们突然发现,此时 $l\leq r$ 的限制居然等价于 $2n\leq l+r\leq 4n-2$!
考虑一个非 $-1$ 的位置,显然在放到它的轮次,可能的区间只有 $\leq 6$ 个,因此如果存在至少一个 $-1$,我们暴力地对于每层进行转移,时间复杂度是正确的。
尝试形式化地描述上述的“暴力转移”,即初始在 $(0,y)$,要走到 $(x,y)$,不能碰到 $y=y_0$ 和 $y=y_1$,每次可以从 $(a,b)$ 走到 $(a+1,b\pm 1)$。
这是一个经典的反射容斥问题,可以在 $O(\frac{x}{y_1-y_0})$ 的时间复杂度内解决,由于此处 $y_1-y_0$ 显然比 $x$ 大,因此我们认为它可以在 $O(1)$ 的时间复杂度内解决。
最后考虑全部为 $-1$ 的情况,我们引用一条我自己说的话:能写 $O(\text{poly}(n))$ dp,输入一个数,输出一个数的所有题都能整式递推,于是套一个整式递推,时间复杂度 $O(n)$。
![](https://s3.uuu.ovh/imgs/2022/11/21/7eaea247484ae149.jpg)
帝宝麦昆贴贴(pixiv id: 92336524)
## Centroid Guess
假设我们现在确定了树的重心在 $u$ 到 $v$ 的链上,考虑如何找到它。
设 $u$ 到 $v$ 的链经过的所有点依次为 $c_1,c_2,\dots,c_k$,我们把由链上一点 $c_i$ 出发不经过链上其他点可到达的点的集合称为 $A_i$,显然 $A_1,A_2,\dots,A_k$ 这 $k$ 个集合不重不漏地包含了树上所有的 $n$ 个点。
设集合 $A_i$ 的大小为 $s_i$,链上显然存在恰好一个点 $c_x$ 满足 $\max\{\sum\limits_{i=1}^{x-1}s_i,\sum\limits_{i=x+1}^ks_i\}\le\lfloor\frac{n}{2}\rfloor$,注意到不满足该条件的链上的点一定不是重心,而目前已经确定重心在链上,所以此时 $c_x$ 就是树的重心。
接下来考虑通过 $2n$ 次询问得到树上每个点所属集合,进而求出 $s$。对于一个点 $x$,询问 $dis_{u,x}$ 和 $dis_{v,x}$,容易发现对于同个集合中的点,$dis_{u,x}-dis_{v,x}$ 的值全相同,若 $dis_{u,x}-dis_{v,x}=t_1$,$dis_{u,v}=t_2$,则 $x\in A_{(t_1+t_2)/2+1}$。于是我们求出了树上每个点所属集合,也求出了 $s$,找到了重心。这最多需要消耗 $7.5\cdot10^4\times2=1.5\cdot10^5$ 次询问。
现在问题是找到点对 $u,v$,使得树的重心在 $u$ 到 $v$ 的链上。
我们取一个常数 $M$,使得 $\frac{M(M-1)}{2}\le5\cdot10^4$,然后在树上随机选取 $M$ 个点,并询问两两间距离,这需要消耗 $\frac{M(M-1)}{2}\le5\cdot10^4$ 次询问。
设这 $M$ 个点分别为 $p_1,p_2,\dots,p_M$,我们建出包含 LCA 的以 $p_1$ 为根的虚树。容易发现 $dis_{x,y}+dis_{y,z}=dis_{x,z}$,当且仅当 $y$ 在 $x$ 到 $z$ 的链上。对于一个点 $p_x$,我们可以找到 $p_1$ 到 $p_x$ 的链上的所有点,找到这些点中除自己外与 $p_x$ 最近的点与 $p_x$ 连边,它就是点集中 $p_x$ 的深度最大的祖先。
此时我们求出了不包含 LCA 的以 $p_1$ 为根的虚树,接下来我们将添加 LCA 至虚树中。设包含 LCA 的虚树为 $T$。
我们从 $p_1$ 开始 dfs,设当前节点为 $u$,显然 $u$ 的儿子之间不构成祖先后代关系,我们枚举 $u$ 的儿子 $v$,若一个点 $x$ 满足 $u$ 不在 $x$ 到 $v$ 的链上,则在 $T$ 中 $v$ 与 $x$ 在 $u$ 的同一个子树内的,找到所有在 $T$ 中与 $v$ 在 $u$ 的同一个子树内的点后,容易计算它们 LCA 的深度,并处理出 LCA 到当前虚树所有点的距离,接着断开原来的边,从 LCA 向 $T$ 中与 $v$ 在 $u$ 的同一个子树内的点连边,然后从 $u$ 向 LCA 连边,然后对 $u$ 重复上述过程,直到 $u$ 的儿子中任意两个点都不在 $T$ 中 $u$ 的同一个子树内,然后向目前 $u$ 的儿子 dfs。不难发现,完成 dfs 后,我们就得到了完整的虚树。
仅仅对于原始随机到的 $M$ 个点,我们认为它的点权是 $1$,虚树中其他点点权均为 $0$,我们找到虚树的带权重心(有多个时可任意取其中一个),并以它作为虚树的根,选取它最大的两个子树进行 dfs,每次都走最大的子树,这样得到两个叶子,称其为 $u,v$,原树的重心有极高的几率在 $u$ 到 $v$ 的链上。然后套用之前的算法即可求得重心。两部分总询问次数相加不超过 $2\cdot10^5$
正确性证明:
虚树重心最大的两个子树大小之和至少为 $2/3$ 的虚树大小。
若原树的重心不在 $u$ 到 $v$ 的链上,那么设虚树的重心在原树重心的子树 $E$ 中,$E$ 中至少包含了 $2/3$ 的我们随机出来的节点,又由于 $E$ 的大小不超过 $\lfloor\frac{n}{2}\rfloor$,所以随机一个点不在 $E$ 中的概率至少为 $\frac{1}{2}$,随机 $M$ 个点,至多有 $1/3$ 的不在 $E$ 中,$E$ 才能包含 $2/3$ 的我们随机出来的节点,也就是,随机 $M$ 个点,每个点超过 $1/2$ 的概率不合法,至多只能有 $1/3$ 的点不合法。只有这样才会使得该算法出错。这个概率不高于 $\sum\limits_{i=0}^{M/3}C_M^i/2^M$,取 $M=316$,约为 $6\cdot10^{-10}$。
![](https://s3.uuu.ovh/imgs/2022/11/21/cd29a4fd7a5f0700.png)
寄!(pixiv id: 90978873)