2023年4月训练记录

2023.4.15 周六

【联合省选 2021 AB 卷】滚榜

几乎独立完成。

看错题了 2h。

【联合省选 2020 B 卷】消息传递

被报标。

没看出点分治板子题,魅力时刻,我也不知道是怎么回事,可能是康复训练失败。板子打出来清空数组是 \(\Theta(n^2)\) 的,没发现调了一年。

【联合省选 2022 A 卷】树

独立完成。

先想出一个 \(\Theta(n\log^2 n)\) 的基于线段树合并的做法,后来想出单老鸽做法也很麻烦要长链剖分,看了题解,比我巧妙很多。

这题的一个特性是加法和异或混在一起。首先看到异或一定是拆位贡献,这是没得说的。里面的加法如何处理呢?异或是不进位的加法,所以只要考虑好加法的进位即可。对于树上距离,我们固定下面的点 \(u\),也就是固定了 \(v_u\),让它对它的祖先贡献,这样只有 \(d\) 在连续变化,这样就会好处理。首先注意到拆到第 \(k\) 个二进制位的时候我们不关心更高的位,然后注意到,在模 \(2^{k+1}\) 意义下,一个连续段内的 \(d\) 会让第 \(k\) 位为 1,再结合贡献的值全都相同,以及只对树上祖先链贡献,这就启示我们使用树上差分来处理。然而在模 \(2^{k+1}\) 次方下构成常数个连续段,实际上对应的连续段总数可能很多,我们不能直接差分。但是可以考虑由于循环的性质,只要使用差分维护最下面的一个连续段,全部处理完进行一个树上前缀和还原贡献,然后再进行一个跨度为 \(2^{k+1}\) 的前缀和,上面的区间就会自动重复。这样就实现了不用什么数据结构做到 \(\Theta((n + V)\log n)\),注意可能需要一个 \(\Theta(n\log n)-\Theta(1)\) 树上 \(k\) 级祖先。

题解的做法是直接维护数组 \(c_x\) 表示深度模 \(2^{k+1}\)\(x\) 的节点的差分数组值,这样就可以实现 \(\Theta(1)\) 修改。然而这样的差分数组空间开不下,所以只能开一个,在单次 DFS 过程中统计答案,这样无法避免子树外的影响。好在这道题中维护的信息比较简单,可以求逆消除影响,也就是统计子树内异或和的时候只需要记录进入子树内时的异或和与出来以后的异或和的异或差即可。

温馨提示,当你看到 \(1 \le V, n \le ...\) 时,这 绝不 意味着 \(V \le n\) 或其他两者的关系。

2023.4.16 周日

山东集训D0。

【联合省选 2020 B 卷】丁香之路

看题解。神仙题。

经过所有边考虑转化为构造欧拉图。欧拉图分为两部分,所有点度数为偶数以及联通,一般先考虑前者。对于不同的终点分开求。先将所有必经边以及起点到终点的边加入图中,然后从左往右,对于一个遇到的奇数度数点,将它与后一个奇数度数点连边,然后更新奇数度数点的集合,以此类推,最后一定合法,并且在所有非联通欧拉图中这样做代价最小,理由是所有额外路径不交。然后考虑联通性。接下来只需要将原图中所有现在度数不为 0 的点之间,连相邻的边(最多 \(n - 1\) 条),然后找最小生成树即可。时间复杂度 \(\Theta(n^2\log n)\)

难点在需要很多观察和直觉。

【联合省选 2021 A 卷】矩阵游戏

看题解。

多限制构造题,还是基本思路,考虑更难调整满足的性质,先把它满足。这里我们先让 \(a\) 的和为 \(b\),然后再让 \(a\) 在范围内。注意到当满足第一个条件以后,合法的 \(a\) 数组指取决于第一行和第一列的填法。也就是我们设计一种调整方法,只需要它能覆盖第一行第一列的所有取值,同时保证合法,就一定能得到最终答案(或者判定无解)。那么我们可以考虑对于某一行决定一个参数 \(c_i\) 表示 \(a_{i, 1}\) 加上 \(c_i\),后面的数依次减掉、加上、减掉、加上……\(c_i\)。这样每个四联通格子数值不变(这也是处理这类结构求和问题的一个套路)。对于列也一样。然后就转化为了一个差分约束问题。但是注意到对于一些格子我们构造了一些 “和式约束”,这不好办。但是直觉告诉我们这个整体思路很对,考虑微调一下结构参数。对于 \(a_{i, j}\),如果 \(i \equiv j \pmod 2\),则 \(a'_{i, j} = a_{i, j} + c_i - d_j\),否则反转后两项符号。这样就做到了任何位置都是差分约束,同时 \(c,d\) 对邻项贡献异号。接下来一个 Bellman-Ford 即可。不知道要不要 SPFA。完全图似乎 SPFA 会由于队列的 chache miss 反而不如 Bellman-Ford?反正我洛谷 700ms 过了。

【联合省选 2021 A 卷】支配

看题解。

很多人会第一反应以为是支配树。实际上是纯粹的观察性质题,无需会支配树相关的任何复杂结论和 \(\Theta(n\log n)\) 构建的算法也能做出来。如果不存在支配树这个东西那么是很有趣的一道题。

2023.4.17 周一

lxl模拟赛,大为震撼。T1很水,T2是好题,但是很难写,T3是恶心题,不想补。

【联合省选 2020 A 卷】作业题

看题解。

数据范围具有迷惑性,让人觉得是折半之类的指数级技巧。首先考虑GCD比较麻烦,反演一下。\(\gcd\limits_{i = 1}^{n - 1}w_{e_i} = \sum\limits_{\forall i, d|w_{e_i}}\varphi(d)\),那么可以枚举 \(d\) 只保留其倍数,然后求生成树边权和即可。

求生成树边权和是一个经典套路,每个边的权值改为一个二项式 \(wz + 1\),用矩阵树定理求乘积的和,其一次项系数即为答案。其中乘除法在模 \(z^2\) 意义下进行,可以手推一下,\(\frac{az+b}{cz+d} \equiv \frac{b}{d} + \frac{ad - bc}{d^2}z\)

2024.4.18 周二

楼叉楼模拟赛2,巨水场。

下午的讲课:\(nm\) 不同阶时莫队的复杂度:\(\mathrm O(n\sqrt m\cdot T(Modify) + m\cdot T(Query))\)

2024.4.20 周四

前面鸽了一天,学了保序回归,写了【联合省选 2020 A 卷】魔法商店。昨天没调出来,今天看了一眼,二分起点写成 1 了,应该是 0,改完就过了。模拟赛切了 T2,卡常创了 T1 很多分(但是没想出正解很不爽,哈密尔顿回路的 \(\mathrm O(n2^n)\) 做法居然闻所未闻),T3 就没怎么动,感觉不太对胃口,打得还行。

上午模拟赛回归爆零正轨,想了 5h 的 T1,遗憾离场。T2 是原题,不评价。T1 十分 ad-hoc 但是也非常有趣,T3 则是绝世好题,Qingyu 好闪,拜谢 Qingyu!后来都写了题解。

posted @ 2023-04-15 22:06  kyEEcccccc  阅读(95)  评论(2编辑  收藏  举报