Loading

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

按题意模拟即可。

posted @ 2025-11-18 10:33  HaHeHyt  阅读(2)  评论(0)    收藏  举报