more and more construction problem,what should i do ?
一些构造
CF1464F Showing Off
显然原图连边会形成若干内向基环树森林,所有在同一个环上的点 \(S\) 是相同的,注意到原图是二分图,因此所有环都是偶环。
一个重要观察是,我们可以让所有环的长度都是 2,因为总可以把长度 \(> 2\) 的环拆成若干个二元环,而且在 \(S_{i, j} \geq 2\) 的限制下拆成二元环是最优的。
那么 \(S\) 相同且相邻的点可以形成二元环,假设钦定了二元环,那么环上显然可以取 \(1, S - 1\),非环上的若存在一个 \(S\) 比它小的,则可以以 \(S\) 之差连边,否则这个点也必须形成环,否则无解。
因此二分图染色后,把可以匹配的点连边,对于一些点,可以参与匹配,对于另外一些点,必须参与匹配。因此跑有源汇上下界可行流即可。
虽然不是纯正的二分图匹配的 \(\mathcal O(n \sqrt n)\) 但是也能过?
CF1762F Tree Sum
首先得到 \(d_i + d_{i+ 1} - 2d_{anc_{i, i+1}} = w\),然后非常神秘地我们考虑在模 \(2^k\) 意义下得到同余方程的解,因为 \(x \equiv w(\bmod p) \Leftrightarrow2 x \equiv 2w(\bmod 2p)\),又 \(d_1 = 0\),\(d_{i+1} \equiv w +2 d_{anc_{i, i+1}} - d_i \equiv w+(2(d_{anc_{i, i+1}}\bmod 2^k)) - d_i (b\mod 2^{k+1})\),就可以递推求解,最后再检验即可。
CF1423C Dušan's Railway
*3500 就这?
首先直接令 \(k = 3\),考虑序列上的问题:等价于先预处理一些区间,使得任意一个区间都可以由不超过 3 个预处理的区间得到。
当 \(k = 2\) 时就是猫树了,但是预处理的区间个数为 \(n \log n\) 级别,无法接受。
考虑 \(k = 3\) 是怎么拼出来的,可以想到分块的过程,两个不在同一块可以由一个后缀 + 整块对整块 + 前缀得到。但当两个元素在同一块内就寄了,考虑对每块内部继续分块,递归这个过程,次数不超过 \(\log \log n\) 次。
在树上就树分块即可,使用随机撒点的树分块,每块期望大小 \(\mathcal O(\sqrt n)\),其实不满。
但是我被 wa on #7 了是怎么会是呢?
CF1299E So Mean
这个 *3400 和上面一个 *3500,高下立判。
首先因为 \(n\) 是偶数,考虑 \(\{1, 2, \dots, n - 1\} =\dfrac{n(n-1)}2 \bmod (n - 1) = 0\), 加入 \(n\) 去掉非 1 的其他任意一个数,模 \(n - 1\) 都不是 0,因此可以 \(n\) 次询问,每次去掉 \(i\),就可以知道 \(a_i = 1\) 还是 \(n\),此时两个位置没有要求,然后把这两个位置删掉继续做,这时候需要检查这个位置是 \(n - i\) 还是 \(i+1\),由于奇偶性不同可以加入 1 判断。
这样 \(n^2\) 次操作问出所有数。太劣。因为太多答案是 0。
考虑取一些互质模数,算出所有数在模这些数的余数,若 \(\prod p > 800\) 就有唯一解,可以取 \(S = 3, 5, 7, 8\)。
以 8 为例,考虑先构造一些模 8 互不相同的集合 \(S\),对于每个数都加入这些集合询问,若为 1 就可以根据 \(S\) 的和算出当前数的和。
可以取 \(S = \{1, 2, 3, 4, n - 4, n - 3, n - 2\}\),再依次选择一个元素 + 1,得到 7 个集合,因此需要先问出 $1, 2, 3, 4, 5, n - 4, n - 3, n - 2, n - 1, n $ 这些值的位置。牛的。
P7597 「EZEC-8」猜树 加强版
考虑先问出深度,确定每个点的儿子,注意到所有轻儿子大小总和为 \(n \log n\),因此如果对于每个点只问轻儿子的子树节点,可以接受。
考虑每次随机选择 \(x\) 子树的节点,并判断是哪个儿子 \(y\) 的子树,令 \(y\) 为重儿子即可,因为此时是按照 \(sz\) 带权询问的。
递归即可,总操作次数 \(\mathcal O(n \log n)\) 次。
CF1270G Subset with Zero Sum
注意到 \(i - n \leq a_i \leq i - 1\),因此 \(1 \leq i - a_i \leq n\),每个 \(i\) 连 \(i - a_i\),若存在一个环,则环的和为 \(\sum\limits_{i} i - a_i = \sum i\),此时输出环上所有节点即可。
CF343E Pumping Stations
首先构建最小割树,问题变成寻找排列使得相邻 min 最大,容易猜想答案为边权和,容易构造:每次选择边权最小的边断开,两个连通块分开求解,此时只会经过一次。
时间复杂度 \(\mathcal O(n^3)\)。
CF1406E Deleting Numbers
gyh20 \bx \bx
考虑求出 \(x\) 的所有质因子,枚举每个质因子 \(p\) 判断,每次直接删掉所有 \(p\) 的倍数,若存在一个 \(p^k\) 查询有值则表示 \(x\) 存在质因子 \(p^k\)。
100000 里面有 9500 个质数,15514 个质数幂次,总操作约为 2w 次,考虑优化。
根据经典的 ”每个数最多有一个 \(> \sqrt n\)“ 的因子可以根号分治,设 \(B = \sqrt n\),对于 \(< B\) 暴力询问。若此时 \(x >1\) 直接对每个 \(\geq B\) 的素数询问 \(xp\) 是否存在即可。
否则 \(x\) 就是一个 \(\geq B\) 的素数,再根号一下,若干个数为一组执行 b,查询此时个数是否合法,若不合法在组内查即可。