ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Petrozavodsk Summer 2021. Day 2. The American Contest 题解

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

按题意模拟即可。

返回列表