2023.10.12 祭品圣遗物
A. 异或
矩阵中 下三角阵加法 的 Trick:考虑 横向、纵向、对角线方向分别差分,然后分别按照对应方向求前缀和再相加得到一个位置的实际值。
B. 游戏
给定一个大小为 \(n\) 的整数集合,A 和 B 轮流操作共 \(m\) 轮。第 \(i\) 轮有一个参数 \(b_i\) 表示此次操作要么从集合删除 \(b_i\) 的倍数,要么删除非 \(b_i\) 的倍数的数。最终剩下的数字和即为权值,A 希望最大化权值,B 则反之,求各自最优行动后的结果。\(n\le2\times10^5,m\le2\times10^4\)。
把操作看成 01 序列,朴素做法是所有 \(2^n\) 种方案,这时会发现绝大多数方案都只会剩下 \(0\) 个数。实际上,
断言:所有方案剩下的数之和仅为 \(n\)。
这是因为从 \(1\) 到 \(m\) 考虑每次两种操作,分别得到原集合的两个互不相交的子集。相当于从根出发 DFS 一个深度为 \(m\) 的 01Trie 并分割一个集合到儿子,最后自底向上合并答案(根据深度从两个儿子的答案中取 \(\min\) 或者 \(\max\),对应当前位置的决策走到哪个儿子)的过程。而绝大多数情况下都有一个儿子对应集合是空的,可以直接剪掉(答案为 \(0\)),使得树的大小与时间复杂度都达到 \(O(nm)\)。
进一步发现,若每次都走到对应集合较小的儿子,最多 \(\log_2n\) 次就能达到空集即答案为 \(0\);考虑到轮流操作,最多 \(2\log_2n+1\) 次双方就一定都能取到答案 \(0\)。因此当 \(m>2\log_2n\) 时答案一定为 \(0\)。阈值分治一下,复杂度来到 \(O(n\log n)\)。
C. 连通块
考虑一无向图,给定各点点权,任意点权 \(\gcd\) 为合数的两点间有连边,最小化删去一个点后的最大连通块大小。\(n\le 10^5\),值域为 \(10^7\)。
这个询问显然是 Tarjan 求出所有割点,在圆方树上统计。只需考虑优化建图。
注意:Tarjan 考察的是连通性问题,因此只要保证原图中的每个点对,连通性在优化后图中不变即可。套路地 \(d|\gcd(i,j) \Rightarrow d|i, d|j\),因此只需要找到 没有更小合数因子 的合数,建立 虚点 连接所有出现过的倍数,虚点 \(siz\) 为 \(0\)。
线性筛求出所有质数。可见满足条件的合数的恰好是两个(可重)质数相乘。对每个点权值分解质因数后两两相乘,可知其有最多 \(O(log^2V)\) 个这样的合数因子,于是总边数 \(O(n\log^2V)\)。
D. 公交路线
考虑一棵树,点有颜色,\(q\) 次询问,第 \(i\) 次求不允许以 \(u_i\) 为端点的前提下,树上选出自身两端点同色的两条不相交路径的本质不同方案数。
相当于要求 \(h_u\) 表示有以 \(u\) 为一端点的方案数。则询问答案为 \(\dfrac{ \sum_{v\neq u_i} h_{u_i}}{2}\)。

浙公网安备 33010602011771号