Petrozavodsk Summer 2021. Day 2. The American Contest 题解
Petrozavodsk Summer 2021. Day 2. The American Contest,看没人发来个全网首发,解释了原题解一些不清楚的地方。
略简单的 \(D,E,F,L\) 不是我通过的我懒得写了,相信大家自行解决不难。\(B\) 算几不想做。
A
考虑子集封闭这个条件,记 \(S_x\) 表示 \(x\) 的所有二进制子集构成的集合。
于是给定的集合一定是形如 \(S_{x_1}\cup S_{x_2}\cup \cdots \cup S_{x_k}\)。
考虑对单个 \(S_x\) 怎么做,对于每个 \(y\sube x\),相当于对于 \(x\) 的所有二进制位,\(y\) 翻转对应的位即可。
然后对于重复的数怎么办呢?注意到能多翻转一定是不劣。
于是我们引出如下过程:
枚举 \(t=2^0,2^1,\cdots ,2^{59}\),扫描 \(a_1\sim a_n\),若 \(a_k\text{ xor } t\) 仍然在原来的 \(a\) 中,则异或一下。
根据上面的思想容易证明这样是正确的。需要使用优秀的哈希表才足以通过。
C
二分答案,对正方形每个上角考虑即可。
G
考虑算出 \(n\) 递归 \(k\) 层形成的数的个数 \(\dbinom{n+k-1}{k}\),以及 \(n\) 递归 \(k\) 层后数 \(m\) 的出现次数 \(\dbinom{n-m+k-1}{k-1}\)。
不妨考虑极限数据 \(s=5\)。考虑当前算 \((x,s)\) 表示 \(x\) 递归 \(s\) 层的某个前缀的某个数出现次数。
然后注意到递归 \(s\ge 3\) 层的时候,最多只要算 \(a^{1/3}\) 次就能令 \(s-1\) 递归到下一个 \((x',s-1)\),中间的贡献都是完整的一块,可以直接算出。
后两层直接预处理,用带 \(\log\) 数据结构维护,复杂度 \(\mathcal{O}((n+q)\log n+qV^{1/3})\)。
其中不妨把 \(s\) 看做常数,\(V\) 是 \(a\) 的值域。
H
神必图论题。考虑首先特殊边构成的子图有三度点,则一定无解。
于是特殊边子图的 每个连通块 为环或者链。
然后注意到如果有一个连通块为环就直接有解了,于是只需考虑全是链的情况。
首先把特殊边的链缩成一条特殊边。
考虑建模新图 \(G':\)
对于压缩 \(G\) 中的每一条边 \(e = (u, v)\),我们都在新图 \(G'\) 中创建两个节点,可以理解为边 \(e\) 在 \(u\) 端的 端口 和在 \(v\) 端的 端口。
我们把它们记作 \(\text{port}(u, e)\) 和 \(\text{port}(v, e)\),构成了 \(G'\) 的所有顶点。
对于压缩 \(G\) 中任意一条边 \((u,v)\),我们都连接 \((\text{port}(u, e),\text{port}(v, e))\)。这条边代表了 在环中走过 \(e\) 这条边 的操作。
对于压缩 \(G\) 中的每一个顶点 \(u\),我们需要将它所有相关的端口节点在 \(G'\) 中连接起来,以模拟 路径经过顶点 \(u\) 的过程。连接方式取决于 \(u\) 的类型:
- 若 \(u\) 不是任何特殊边的端点。则把 \(\text{port}(u,*)\) 两两连边(连成团)即可。
- 若 \(u\) 是一条特殊边的端点(显然只能是一条,否则能再缩),记为 \(e_u=(u,v)\)。那么就把 \(\text{port}(u,e_u)\) 和其他所有 \(\text{port}(u,e')\) 连边。表示从其他边进入 \(u\) 必须从特殊边走出,否则不满足条件。
现在我们把原压缩图 \(G\) 以及题目的所有限制都浓缩到 \(G'\) 上了,于是所有 \(G'\) 的简单环都是导出原图的一个合法环解。
只需在 \(G'\) 图上找环即可。
建模最坏会有 \(\mathcal{O}(m^2)\) 条边,所以复杂度就是这个。但是实际根本跑不满,无所谓。
或者可能有一些更优秀复杂度的实现,期待更多探究。
I
首先发现只有最小生成树上的 \(n-1\) 条边有用,仅保留它们。
假设我们确定了最终哪些点在一个连通块内,之后相当于做一个最小生成树的过程加边。
类似 Kruskal 算法的,按边权从小到大加边,每次判加完边是否存在 守卫 与 此时连通块 的完美匹配。
复杂度取决于二分图匹配写法为 \(\mathcal{O}(n^3\sqrt n)\) 或者卡不满的匈牙利 \(\mathcal{O}(n^4)\)。
反正跑飞快。不知道能不能证到更优复杂度。
J
直接 dp 即可。
K
考虑当 \(|x_1-x_2|,|y_1-y_2|>1\) 时 \(x,y\) 坐标独立。直接分别算出来然后异或一下即可。
算出此时两个 \(x\) 坐标分别为 \(i,j\) 时的 SG 函数 \(sg_{i,j}\),直接对下一步的 \(sg_{i,<j},sg_{<i,j}\) 取 \(\text{mex}\),复杂度 \(\mathcal{O}(n^3)\)。
询问就暴力枚举先手走啥,然后算 SG 函数是否为 \(0\) 即可(后手必胜)。
- 注意特判 \(|x_1-x_2|\le 1\) 或 \(|y_1-y_2|\le 1\) 的情况。此时 \(|x_1-x_2|+|y_1-y_2|>1\) 则先手必胜,否则后手必胜。
M
按题意模拟即可。

浙公网安备 33010602011771号