1 条题解
-
1
考虑 连有向边,形成基环树森林。
容易发现最关键的是选择一个环,那么剩下的边都可以直接接上去。因此只需要找到一个环即可。
那么这个时候,一些 是顺时针的,一些 是逆时针的,考虑把逆时针的几个取负,相加,得到和为 。
因此转化为经典的相同子集和问题:试选择两个不同的无交子集,使得和相同。这显然要限制范围。
鸽巢原理,解 ,取 发现可行,也即 一定有解。找相同子集和时,令 。
UPD:事实上,我才疏学浅,只能构造出大小为 的不可行解。如果有能够构造出大小 的人,可以联系我,也许我会提供神秘奖励(。
- Solution 1:背包
考虑 dp,设 表示前 个数的子集和可否为 ,如果一个 被第二次转移到就得到了解。用 bitset 优化过程。
的上界是 $\lfloor \frac n2 \rfloor \cdot 10^6 = \mathcal O(V\log V)$。时间复杂度,渐进意义为 ,可以通过。时限大致是 3 倍 std 复杂度。
- Solution 2:双向搜索
考虑分成每部大小 的两部分,直接每一部分 搜索可能的子集和,最终 map 查询是否相同即可。
时间复杂度的渐进意义为 ,
可以通过。实测取 根本过不去,于是面向出题人的构造水平取了 ,跑了 1.7s 左右,合理推断如果能构造出来 的无解数据这个做法就没了。
轻度卡常。
- 1
信息
- ID
- 793
- 时间
- 3000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 115
- 已通过
- 4
- 上传者